Предположим, что у нас есть следующий код:
template <typename T>
void foo(const T&);
int main()
{
foo("str");
}
gcc 4.7.2, clang 3.2, icc 13.0.1
undefined ссылка на `void foo < char [4] > (char const (&) [4]) '
MSVC-11.0
неразрешенный внешний символ "void __cdecl foo < char const [4] > (charconst (&) [4])" (?? $foo @$$ BY03 $$ CBD @@YAXAAY03 $$ CBD @Z)
Обратите внимание на char[4]
на первом выходе и char const[4]
на втором выходе.
Почему? И кто прав? Можете ли вы привести этот стандарт, пожалуйста?