Основной вопрос по шаблонам C ++ - PullRequest
3 голосов
/ 01 августа 2011

Рассмотрим этот слишком простой тест:

class foo
{
    public:
        foo(int i);
        template< typename T > foo(T);
};

template<> foo::foo(int i) {}

Теперь GCC с радостью примет это при компиляции, но компилятор RVCT выдаст ошибку:

test.cpp", line 11: Error:  #792: "foo::foo(int)" is not an entity that can be explicitly specialized
 template<> foo::foo(int i) {}

Запрет на выпуск«Зачем вам это нужно», является ли это законным C ++ (с академической точки зрения?)

Заранее спасибо

1 Ответ

3 голосов
/ 01 августа 2011

Вы пытаетесь сделать явную специализацию template<typename T> foo(T), где T = int.

Вы действительно этого хотели?

template<typename T> foo::foo(T) {
}

--- EDIT --- *

Просто чтобы прояснить: «явная специализация» является допустимой в C ++, но, по-видимому, ваш компилятор не поддерживает ее (в любом случае, для отдельных методов, может быть, для целых классов?).

...