我有这个代码和GCC打印"什么!?".我怎样才能避免这种情况,因此虚空演员只有C的意思是"忽略孤独的'a;'"?
#include <iostream>
struct A {
template<typename T>
operator T() {
std::cout << "what!?";
}
};
int main() {
A a;
(void)a;
}
Run Code Online (Sandbox Code Playgroud)
eca*_*mur 10
12.3.2转换函数[class.conv.fct]
(1)转换函数永远不会用于将(可能是cv-quali fi ed)对象转换为[...](可能是cv-quali fi ed)void.
116)转换为void不会调用任何转换函数(5.2.9).5.2.9静态强制转换[expr.static.cast]
(6)任何表达式都可以显式转换为cv void类型,在这种情况下它变成一个废弃值表达式(第5条).
作为一种解决方法,您可以写:
a, void();
Run Code Online (Sandbox Code Playgroud)
这是不可能重载的,operator,(void)因此从一致的实现中调用用户定义的行为是不可能的.