In the following code :
#include <iostream>
using namespace std;
template<class T >
class Setting
{
public:
Setting(Setting* instance){
((T*)instance)->write();
};
Setting(){ write(); };
virtual void write(){ cout << "in parent\n"; }
};
class child :public Setting<child>
{
public:
child() :Setting(this){};
virtual void write(){ cout << "in child\n"; }
};
int main()
{
child ch;
}
g++ prints "in child"
which is exactly what I want .( http://coliru.stacked-crooked.com/a/4304ab99ebd894b3)
But in visual studio 2013 output is "in parent"
!!!(http://rextester.com/EMQ5448)
why?? Is there any alternative way for getting the same result in visual studio?