путаница компилятора в функциях с аргументами кортежа

Я использую компилятор 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

Решение

Вы уверены, что компилятор находит оба приемлемых, и не говорит, что ни один не является приемлемым и перечисляет кандидатов? std::tupleКонструктор аргументов на элемент explicitи поэтому не подходит, когда дело доходит до копирования-инициализации параметра из фигурного инициализатора. Другими словами, ни одна функция не должна быть выбрана.

Вам необходимо явно создать кортеж в аргументе.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]