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?
 
     
    