【发布时间】:2014-10-05 13:03:51
【问题描述】:
为什么我不能这样做:
class Foo {
void fn();
using fn_t = decltype(fn); //call to non-static member function without an object argument
};
但我能做到
class Foo {
static void fn();
using fn_t = decltype(fn);
};
This SO post 声称:
在未计算的操作数(decltype、sizeof、noexcept 等操作数)内,您也可以在成员函数之外命名非静态数据成员
【问题讨论】:
-
请注意,函数不是数据成员。
-
decltype接受一个表达式。fn本身不是一个表达式。 -
@dyp 但它可以单独出现吗?我似乎记得有一些关于成员函数名称如何仅出现在函数调用或
&ClassName::FunctionName中的内容。 -
@IgorTandetnik 我认为它可能不会出现在这种情况下。它是
&Foo::fn或fn(),但它是一个表达式。 [expr.prim.general]/13 -
@IgorTandetnik 是的,我只是检查了标准,你是对的。 cppreference.com 说它也可能需要一个 entity - 我猜这让我失望。无论如何我可以做我想做的事吗?