#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("");
}
マイコンパイラは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)、可能なdupeです。どう思いますか? –