4

我正在使用 Apple 的 LLVM 4.2 编译器来编译这个 C++ 代码。我已经用不同的元组组合重载了一个成员函数,并且我相信我正在正确调用其中的一个,但编译器发现了歧义。本质上,我试图在下面调用方法 (1),但编译器发现方法 (2) 也可以接受/兼容。这是为什么?我打开了 C++11 标志。

enum class Enum1 { ... }
enum class Enum2 { ... }
enum class Enum3 { ... }
enum class Enum4 { ... }

void myMethod() {
  Enum1 e1;
  Enum2 e2;
  Enum3 e3;
  doSomething({e1,e2,e3}); // should pick (1), yet compiler finds (2) compatible also!?
}

inline void doSomething(const tuple<Enum1,Enum2,Enum3>& p) { // (1)
  ...
}

inline void doSomething(const tuple<Enum1,Enum2,Enum3,Enum4>& p) { // (2)
  ...
}
4

1 回答 1

2

您确定编译器发现两者都可以接受,并且没有说没有一个是可以接受的并列出候选者吗?std::tuple的每元素参数构造函数是explicit,因此在从花括号初始化器复制初始化参数时不符合条件。换言之,不应选择任何功能。

您需要在参数中显式构造元组。

于 2013-09-04T14:34:53.857 回答