template<int N>
struct S
{
void foo()
{
sizeof( S ); // (*)
sizeof( S<N> );
}
};
int main()
{
S<5> s;
s.foo();
return 0;
}
Этот код компилируется отлично (VS2010), но я сомневаюсь в строке (*)
. S
не является полным типом, в отличие от S<N>
, на мой взгляд, тогда как компилятор знает свой размер? Что говорит стандарт о такой ситуации, правильно ли он сформирован правильно sizeof
?