私はすべての私は、以下を試してみましたコンパイラ(GCC 4.7.2、GCC 4.8.0ベータ、ICC 13.0.1、クラン3.2、VC10)から予期しない結果を取得しています:decltype( "Hello")の結果は何ですか?
#include <type_traits>
int main()
{
// This will fire
static_assert(
std::is_same<decltype("Hello"), char const[6]>::value,
"Error!"
);
}
私が持っているでしょうを上回るコンパイル時のアサーションが発生しないことが予想されますが、それは発生しませんが、は発生します。結局、この1つは(予想通り)ない:
#include <type_traits>
int main()
{
char const hello[6] = "Hello";
// This will not fire
static_assert(
std::is_same<decltype(hello), char const[6]>::value,
"Error!"
);
}
だからdecltype("Hello")
の結果は、C++ 11標準(参照高く評価されている)に応じて何ですか?上記のコンパイル時のアサーションが発生しないように、私はそれをどのように比較すればよいですか?
これらのルールは、 'decltype(expr)&&'の記述を考えると意味があります。 –
@KerrekSB:はい。私は「文字列リテラルには型const char []があります」、「decltype(x)」は 'x'の型を返すので、 hello ")'は 'const char [6]' "を返し、詳細を忘れてしまいます。レッスンは質問と回答の両方に –
+1を学んだ(うまくいけば)。私はもうC++コンパイラには触れないことを約束します。 –