【发布时间】:2017-03-24 15:02:08
【问题描述】:
class A {
public:
int num;
A ( int param ) : num( param ) {}
operator decltype( auto )( ){ return num; }
};
class B {
public:
int num;
A objA;
B ( int param ) : num( param ), objA( param ) {}
//operator A( ) { return objA; } // Works // #1
//operator int( ) { return objA; } // Works // #2
//operator char( ) { return objA; } // Actually Not Needed // #3
//operator double( ) { return objA; } // Actually Not Needed // #4
operator decltype( auto )( ){ return objA; } // Does NOT Work // #5
};
int main(){
A objA( 1 );
int x1 = int( objA );
char y1 = (char) objA;
double z1 = objA;
B objB( 2 );
A objA2 = objB;
int x2 = objB;
char y2 = objB;
double z2 = objB;
return 0;
}
这段代码既不能用 clang 也不能用 gcc 编译,所以我认为它是不正确的。但是,如果我注释第 5 行并取消注释第 1 行和第 2 行,则程序在两个编译器中都能正常工作(实际上并不需要第 3 行和第 4 行)。
据我所知,两种情况下都定义了必要的转换顺序。有谁知道为什么这个程序不正确?我错过了什么?
【问题讨论】:
标签: c++ type-conversion c++14 auto decltype