【发布时间】:2016-03-10 01:13:03
【问题描述】:
考虑以下代码:
struct Bar {
void operator()() {}
};
int main() {
std::cout << std::boolalpha << std::is_function<Bar>::value <<
}
输出是false。
这并不奇怪,因为函子 Bar 不符合函数类型的条件§8.3.5 Functions [dcl.fct]。
现在考虑以下代码:
struct Bar {
void operator()() {}
};
int main() {
std::cout << std::boolalpha << std::is_function<Bar()>::value << std::endl;
^^
}
注意Bar 后面的括号。输出为true。
Bar() 如何被限定为函数类型?
我的猜测是,这是一个最令人头疼的解析情况,但既然它在模板参数列表中,怎么可能呢?
【问题讨论】:
-
如果您的目标是查看
Bar是否可调用(以某种方式),std::is_function将无济于事。 -
@alfC 是的,我的第一印象是我可以查询一个类型是否是可调用的。然而,我发现这不是它的目的。
标签: c++ c++11 c++14 typetraits most-vexing-parse