我从所有尝试过以下操作的编译器(GCC 4.7.2、GCC 4.8.0 beta、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!"
);
}
那么decltype("Hello")
根据 C++11 标准的结果是什么(高度赞赏参考)?我应该将它与什么进行比较,以使上面的编译时断言不会触发?