在Kona會議上,構造函數(P0091R0)的模板參數扣除已被批准。它簡化了一些變量定義:初始化列表中的構造函數的模板參數扣除
std::pair p {1,2}; // o.k., constructor pair<int,int>(1,2)
std::vector v1 (10, 0); // o.k., 10 zeroes, constructor vector<int>(size_t n, T initvalue)
std::vector v2 {10, 0}; // o.k., 2 values: 10, 0, apparently initializer list?
std::vector v3 = {10, 0}; // o.k., same as v2?
但是,下面的線不會以GCC 7編譯HEAD 201611版本(live example):
std::vector v4 = {3}; // error: no matching function for call to 'std::vector(int)'
std::vector v5 {1, 2, 3}; // error: 'int' is not a class
std::set s {1, 2, 3}; // error: no matching function for call to 'std::set(int,int,int)'
這些僅僅是 「遙遠的橋」,因爲它們涉及初始化列表? 它們是否覆蓋了模板類型參數推導? 當編譯器符合C++ 1z時,它們會被允許嗎?
我認爲你的「與v3相同?」是一個錯字。 –
@John Zwinck:是的,謝謝,糾正。 –
最初的建議根本沒有正確的措辭。我們有一些[大規模標準修復](https://github.com/cplusplus/draft/commit/954e86feae0c5cbb80c2c506fd5e3db4993bf60a)傳入。 –