Consider this code:
struct A; // incomplete type
template
struct D { T d; };
template
struct B { int * p = nullptr; };
int
Well, I think in Visual Studio 2013 code should look like(without = nullptr):
struct A; // incomplete type
template
struct D { T d; };
template
struct B { int * p; };
int void_main() {
B> u, v;
u = v; // compiles
u.operator=(v); // compiles
return 0;
}
In this case it should compile well just because incomplete types can be used for specific template class specialization usage.
As for the run-time error - the variable v used without initialization - it's correct - struct B does not have any constructor => B::p is not initialized and could contain garbage.