Ответ 1
Используя предоставленный конструктор для Wrapper, g++ 7.1.1 дает мне следующую ошибку:
main.cpp: In function ‘int main()’:
main.cpp:29:25: error: converting to ‘Wrapper’ from initializer list would use explicit constructor ‘constexpr Wrapper::Wrapper(const char*, const char*)’
Wrapper w({"a", "b"});
^
Итак, кажется, что явное ключевое слово в конструкторе Wrapper хорошо учитывается при ручном запуске преобразования.
Однако ошибка при вызове q указывает, что разрешение перегрузки игнорирует явное ключевое слово:
main.cpp:34:17: error: call of overloaded ‘q(<brace-enclosed initializer list>)’ is ambiguous
q({"a", "b"});
^
main.cpp:16:6: note: candidate: void q(Wrapper)
void q(Wrapper w)
^
main.cpp:21:6: note: candidate: void q(std::pair<const char*, const char*>)
void q(std::pair<const char *, const char *> w)
^
Это может быть ошибка в g++, которая должна быть проверена другими источниками.