请考虑以下代码:
enum A : unsigned { a = 1, b = 2, c = 4 };
class B
{
friend constexpr A operator|(A a1, A a2)
{ return A(unsigned(a1) | unsigned(a2)); }
};
template <A a>
class C
{
};
int main()
{
C<a|c> c;
}
Run Code Online (Sandbox Code Playgroud)
使用g ++(4.8.1,-std = c ++ 1)编译时,出现以下错误:
test.C: In function ‘int main()’:
test.C:16:12: error: invalid conversion from ‘unsigned int’ to ‘A’ [-fpermissive]
C<a|c> c;
Run Code Online (Sandbox Code Playgroud)
这告诉我没有找到运营商.但是,如果代码更改为:
enum A : unsigned { a = 1, b = …Run Code Online (Sandbox Code Playgroud) 我想有一个类允许访问它的基本情况的const接口,但不是.特别是:
class B
{};
class A : private class B
{
public:
operator const B&() { return *this; }
};
int main()
{
A a;
const B& b = a; // Should this line be an error?
}
Run Code Online (Sandbox Code Playgroud)
g ++给出了一个无法访问的基类错误.那些语言专家认为这个错误在C++ 11/C++ 14中是否正确?
是的,我意识到我可以(而且会)这样做:
int main()
{
A a;
const B& b = a.operator const B&();
}
Run Code Online (Sandbox Code Playgroud)
有关此构造的另一种方法的任何建议吗?