Явная реализация шаблонного конструктора для шаблонного класса

Я не уверен, является ли это ошибкой в Clang 3.2 или нарушением C ++ 03, но кажется, что явное создание экземпляров шаблонных конструкторов для шаблонных классов завершается неудачно, но явное создание экземпляров шаблонных функций классов-шаблонов успешно.

Например, следующее компилируется без проблем с clang ++ и g ++:

template
class Foo
{
public:
    template
    void Bar( const Foo& foo )
    { }
};
template class Foo;
template class Foo;

template void Foo::Bar( const Foo& foo );
template void Foo::Bar( const Foo& foo );
template void Foo::Bar( const Foo& foo );
template void Foo::Bar( const Foo& foo );

в то время как следующее компилируется без предупреждения с g ++, но не с clang ++:

template
class Foo
{
public:
    template
    Foo( const Foo& foo )
    { }
};
template class Foo;
template class Foo;

template Foo::Foo( const Foo& foo );
template Foo::Foo( const Foo& foo );
template Foo::Foo( const Foo& foo );
template Foo::Foo( const Foo& foo );

В частности, я вижу два сообщения об ошибках вида:

TemplateMember.cpp:12:20: error: explicit instantiation refers to member
      function 'Foo::Foo' that is not an instantiation
template Foo::Foo( const Foo& foo );
                   ^
TemplateMember.cpp:9:16: note: explicit instantiation refers here
template class Foo;
               ^

Это нарушение стандарта или ошибка в clang ++?

Ответы на вопрос(1)

Ваш ответ на вопрос