以下を試したすべてのコンパイラ(GCC 4.7.2、GCC 4.8.0ベータ、ICC 13.0.1、Clang 3.2、VC10)から予期しない結果が得られます。
#include <type_traits>
int main()
{
// This will fire
static_assert(
std::is_same<decltype("Hello"), char const[6]>::value,
"Error!"
);
}
上記のコンパイル時のアサーションが起動しないことを期待していましたが、起動します。結局のところ、これは(予想どおり)ではありません:
#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!"
);
}
では、C ++ 11標準に準拠した結果はどうなるdecltype("Hello")
でしょうか(参照は高く評価されています)。上記のコンパイル時のアサーションが起動しないようにするには、何と比較する必要がありますか?