Parametr C ++ 11: template na nowo definiuje domyślny argument
Podczas kompilowania następującego kodu źródłowego za pomocą gcc nie ma błędów / ostrzeżeń:
template< typename T = int > T func( );
template< typename T = int > T func( );
Kiedy kompiluję ten sam kod źródłowy z clang ++, otrzymałem następujący błąd:
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.
Polecenie do kompilacji
[clang++|g++] -Wall -Werror -std=c++11 redeftempparam.cc
(Informacje o wersji: gcc 4.7.2, wersja clang 3.3 (trunk 171722))
Moje pytanie:
Czy ten typ redefinicji jest dozwolony? Jeśli nie: czy możesz wskazać mi odpowiedni punkt w standardzie C ++?