Я действительно не понимаю этого, я думал, что компилятор сначала выполняет то, что находится в фигурных скобках, а затем дает результат самой подходящей функции. Здесь, похоже, он дает функции список инициализаторов, чтобы справиться с ней...
#include <string>
#include <vector>
using namespace std;
void func(vector<string> v) { }
void func(vector<wstring> v) { }
int main() {
func({"apple", "banana"});
}
Ошибка:
<stdin>: In function 'int main()':
<stdin>:11:27: error: call of overloaded 'func(<brace-enclosed initializer list>)' is ambiguous
<stdin>:11:27: note: candidates are:
<stdin>:6:6: note: void func(std::vector<std::basic_string<char> >)
<stdin>:8:6: note: void func(std::vector<std::basic_string<wchar_t> >)
Почему не переименована моя func(vector<string> v)
перегрузка, и могу ли я сделать ее так?