Добрый день.
Следующий фрагмент кода компилируется на cl.exe (15.00.30729.01) и mingw-g ++ (4.4.0):
template<typename T> class Test{
public:
T t;
void error(){
int doesNotExist = 6;
return doesNotExist;//<---- void function returning result
}
};
int main(int argc, char** argv){
Test<int> test;
return 0;
}
Кроме того, на cl.exe вы можете даже сделать что-то вроде этого:
template<typename T> class Test{
public:
T t;
void error(){
doesNotExist = 6;//<---- undeclared variable
return doesNotExist;//<---- void function returning result
}
};
Теперь, это, очевидно, происходит потому, что компилятор не создает содержимое для методов шаблонного класса, пока кто-нибудь их не вызовет. Однако это может вызвать проблемы при разработке большого класса шаблона (потому что вы, скорее всего, забудете добавить где-нибудь тестовый вызов к новому методу).
Вопрос:
Есть ли переключатель компилятора для g ++ или cl.exe, который заставит компилятор обрабатывать весь шаблон (так что этот фрагмент кода вызовет ошибку компиляции)?