2
我有以下示例代碼。它編譯於鏗鏘而不是2013年。使用VS2013中的initializer_list函數的模糊調用
#include <iostream>
#include <utility>
#include <string>
using namespace std;
void f(const pair<string, string>& p)
{
cout << p.first << ", " << p.second << endl;
}
void f(initializer_list<pair<string, string> > ps) {
for (auto p : ps) f(p);
}
int main()
{
f({ "2", "3" });
f({ { "2", "3" }, { "3", "4" } });
}
到F的第二個調用失敗,編譯它在Visual Studio中:
1error C2668: 'f' : ambiguous call to overloaded function
could be 'void f(std::initializer_list<std::pair<std::string,std::string>>)'
or 'void f(const std::pair<std::string,std::string> &)'
1> while trying to match the argument list '(initializer-list)'
如果我使用對INT,而不是對字符串的它確實工作正常。
有沒有人知道在Visual Studio中有這樣的問題?或者我做錯了什麼?
謝謝。
我幾乎可以肯定,我在bug報告中看到過類似的東西。 – 2014-10-02 19:37:08
我懷疑第二個調用被解釋爲f(pair(string(「2」,「3」),string(「 (「const char *」指針是有效的迭代器),除了「初始化器對列表」的解釋之外,還使用帶有一對迭代器的「std :: string」的構造函數。關於我的頭頂,我不能說這樣的解釋是否合法。 – 2014-10-02 19:39:32
@IgorTandetnik是否有'pair'的初始化列表ctor? – Yakk 2014-10-02 20:35:09