【发布时间】:2016-07-14 12:05:49
【问题描述】:
所以我对它的工作原理感到困惑。给定:
template <typename T>
int foo(T t) { t.foo(); }
看来这个调用应该失败:
decltype(foo(int{ 13 })) fail = 42;
cout << fail << endl;
42
它在我可以访问的所有编译器上都以这种方式工作。这是正确的行为吗?我请求 C++ 标准的报价。
【问题讨论】:
-
std::type_info::name()不能保证提供任何可靠的信息。在其他情况下它会提供其他任何东西吗? -
@StoryTeller 我已经从问题中删除了
type_info。希望这有助于澄清问题。这是一个关于decltype及其要求的问题,我只是想用type_info来演示这个问题。 -
decltype并不需要完整的函数定义来知道结果类型。 (See)。所以没有理由编译原型以外的任何东西。但我没有标准报价。 -
@StoryTeller 哇,这是一个很好的例子。这个概念让我大吃一惊。
-
@StoryTeller
sizeof(decltype(expression))似乎有点多余。
标签: c++ templates compilation language-lawyer decltype