C ++ 11: template parameter overrides default argument

There are no errors / warnings when compiling the following source code with gcc:

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

When I compile the same source code using clang ++, I got the following error:

 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. 

Compilation command

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

(Version Information: gcc 4.7.2, clang version 3.3 (trunk 171722))

My question is:

Is this type of override allowed? If not: can you point me to the corresponding point in the C ++ standard?

+6
source share
1 answer

ยง14.1.12:

The template parameter should not give default arguments to two different declarations in the same scope.

[Example:

 template<class T = int> class X; template<class T = int> class X { /โˆ—... โˆ—/ }; // error 

- end of example]

+9
source

All Articles