C ++ 11: параметр шаблона переопределяет аргумент по умолчанию

При компиляции следующего исходного кода с помощью gcc ошибок / предупреждений нет:

template< typename T = int > T func( );
template< typename T = int > T func( );

Когда я компилирую тот же исходный код с помощью clang ++, я получил следующую ошибку:

redeftempparam.cc:2:24: error: template parameter redefines default argument
template< typename T = int > T func( );
                       ^
redeftempparam.cc:1:24: note: previous default template argument defined here
template< typename T = int > T func( );
                       ^
1 error generated.

Команда для компиляции

[clang++|g++] -Wall -Werror -std=c++11 redeftempparam.cc

(Информация о версии: gcc 4.7.2, версия clang 3.3 (транк 171722))

Мой вопрос:

Разрешен ли этот тип переопределения? Если нет: не могли бы вы указать мне соответствующий пункт в стандарте C ++?

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

Решение Вопроса

4..2:

Параметру шаблона не должны предоставляться аргументы по умолчанию двумя разными объявлениями в одной и той же области видимости.

[Пример:-

template<class t="int"> class X;
template<class t="int"> class X { /∗... ∗/ }; // error
</class></class>

 конец примера]

 Andreas Florath07 янв. 2013 г., 15:06
Что означает:не допускается и Clang ++ является правильным. Большое спасибо!

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