я только обнаружил, что, когда дело доходит до шаблонов этот код компилируется в г ++ 3.4.2 и не работает, если т() не вызывается:Является ли этот код легальным в C++
template <typename T>
class C
{
T e;
public:
C(): e(0) {};
void m()
{
e = 0;
};
};
Теперь можно создавать и использовать экземпляр
C<const int> c;
До c.m()
не называется там нет ошибки компиляции, но это законно?
В целом, правильно, но если быть точнее, он должен говорить о методе, который создается, а не вызван. Помимо вызова его, выполнение указателя на него также сделает это; и если метод является виртуальным, то он определяется реализацией, если отсылка отложена или нет. –
По крайней мере, все зависит от типа шаблона. Существует некоторая путаница с независящими ошибками. Например, VC++ допускает даже полный тарабар в этом методе, если вы его не вызываете ('non-sense here;'), однако другие компиляторы не согласятся с тем, что даже если вы не создаете экземпляр шаблона вообще (что вероятно, правильнее). – UncleBens
Кто-нибудь знает, каково намерение стандартного? Мне не нужно, например, специализировать код для константной версии шаблона, по крайней мере, на текущем уровне моего приложения (вероятно, я буду в будущем для ясности). Но разве это дело? – doc