Я недавно был удивлен, узнав, что этот код компилируется (по крайней мере, на GCC и MSVC++):Где требуются полные типы (не)?
template<typename T>
class A {
public:
T getT() { return T(); }
};
class B : public A<B> { };
Когда это не делает:
class A;
class B : public A { };
class A {
public:
B getB() { return B(); }
};
Это кажется странным мне, что шаблонный класс может принимать неполный тип в качестве параметра шаблона и иметь функцию, которая возвращала ее, вызывая ее конструктор и все еще компилируясь. Итак, где именно требуются полные типы (или если список будет короче, где они не требуются)?
Это может помочь, если вы думаете о шаблонах не как * код * а как инструмент * генерации кода *, и только фактический код должен сделать семантический смысл. –
@KerrekSB Да, но неясно, как _w__генератор генерации кода генерировал свой код. Теперь я это понимаю. –