#include <iostream>
using namespace std;
void f(const char* arg)
{
cout << "arg is a pointer" << endl;
}
template<size_t N>
void f(const char (&arg)[N])
{
cout << "arg is an array." << endl;
}
int main()
{
f("");
}
Мой компилятор clang 3.8.Почему clang принимает строковый литерал как указатель, а не массив?
Выход:
Arg является указателем
Однако, согласно cppreference.com,
Типом без префикса строки буквального является Const символ [] ,
Почему разрешение перегрузки не ведет себя так, как ожидалось?
Эквивалентный пример, но абстрагируясь от шаблона: http://melpon.org/wandbox/permlink/0nGenu5Ysj40wS8u –
[Близко связанный] (https://stackoverflow.com/questions/16708307/is-it-possible-to -legally-overload-a-string-literal-and-const-char), возможный обман. Как вы думаете? –