template<typename T>
void print_size(const T& x)
{
std::cout << sizeof(x) << '\n';
}
int main()
{
print_size("If you timidly approach C++ as just a better C or as an object-oriented language, you are going to miss the point.");
// prints 115
}
これは、最近の g++ コンパイラで 115 を出力します。どうやら、T
(ポインタではなく)配列であると推定されます。その動作は標準で保証されていますか? auto
次のコードはポインターのサイズを出力し、テンプレートの引数推定とまったく同じように動作すると思ったので、少し驚きましたか?
int main()
{
auto x = "If you timidly approach C++ as just a better C or as an object-oriented language, you are going to miss the point.";
print_size(x);
// prints 4
}