我用lambda表達式和編譯器,因爲another question這裏SO實驗。
我剛剛意識到(這是完全正常的確實)下面的代碼是有效的:是[] <typename>(){}一個有效的lambda定義?
int main() {
auto l = [](){};
l.operator()();
}
事實上的標準說,閉合類型有一個公共內聯函數調用操作等,從而能夠調用它是有道理的。
我不能看着的標準解釋(當然,工作草案)的事實是,GCC(6.1)編譯下面的代碼片段(鐺3.9沒有):
int main() {
auto l = []<typename>(){};
l.operator()<void>();
}
沒有警告,沒有錯誤。它是有效的代碼還是應該被編譯器拒絕?
[編譯成功(http://cpp.sh/4asuj) – amanuel2
@ amanuel2我知道,它編譯(海灣合作委員會至少),但問題是,如果它是否有效。 – skypjack
C++ 14將允許「模板」 lambda表達式,但是這與'auto'關鍵字來代替'<>'模板語法(見https://stackoverflow.com/questions/3575901/can-lambda-functions-be -templated)。也許GCC開發者想要嘗試不同的方式來添加這種功能? –