【问题标题】:compiler confusion on functions with tuple arguments带有元组参数的函数的编译器混淆
【发布时间】:2013-09-04 14:24:20
【问题描述】:

我正在使用 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)
  ...
}

【问题讨论】:

  • 你应该提炼一个工作(编译失败)的最小例子

标签: c++ c++11 stdtuple


【解决方案1】:

您确定编译器认为两者都可以接受,并且没有说没有一个可以接受并列出候选者吗? std::tuple 的每元素参数构造函数是 explicit,因此在从花括号初始化器复制初始化参数时不符合条件。换句话说,两个函数都不应该被选中。

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

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    相关资源
    最近更新 更多