コンパイラが次のコードでテンプレート引数を推測できないのはなぜですか? コードを修正するにはどうすればよいですか? 実行時のオーバーヘッドをできるだけ低くしたい。
#include <iostream>
using namespace std;
struct Test
{
template<int N>
Test(const char data[N]) :
data(data),
size(N)
{}
const char *data;
int size;
};
int main()
{
Test test("Foobar");
return 0;
}
スニペットをできるだけ小さくして読みやすいようにしました。
pos-reply 更新:
Tales of C++ K-balloからのこの説明は役に立つかもしれません:
左辺値変換。右辺値が予期されるコンテキストで左辺値引数が使用される場合に適用されます。これらの変換は、左辺値から右辺値への変換、配列からポインターへの変換、および関数からポインターへの変換です。これは、値渡し時にすべての関数引数に適用される型変換であり、通常は引数の減衰と呼ばれます。