C ++: принудительная полная компиляция шаблона (MSVC / G ++)

Добрый день.

Следующий фрагмент кода компилируется на 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, который заставит компилятор обрабатывать весь шаблон (так что этот фрагмент кода вызовет ошибку компиляции)?

6
задан SigTerm 2 November 2011 в 10:56
поделиться