我讀了using function declaration,我想編譯最後一個例子。這是:可以編譯C++的編譯器17參數包的lambda繼承
#include <iostream>
template <typename... Ts>
struct Overloader : Ts... {
using Ts::operator()...; // exposes operator() from every base
};
template <typename... T>
constexpr auto make_overloader(T&&... t) {
return Overloader<T...>{std::forward<T>(t)...};
}
int main() {
auto o = make_overloader([] (auto const& a) {std::cout << a;},
[] (float f) {std::cout << 13 << f;});
}
即使我已經知道並理解它會做什麼,我想編譯和測試它。 然而,clang-4.0和g ++ - 7.0目前似乎都無法編譯它。有任何編譯器可以試試嗎?
如果GCC和Clang的最新版本都無法執行某些操作,則幾乎可以確保沒有其他編譯器可以(模塊化錯誤)。除非它是一個獨立的項目,否則可能是其中一個分支。 –
此功能在一個月前投入工作草案。實施事情需要時間。 –
@TC:我仍然不明白即使聲明列表功能被批准,OP的例子如何編譯。 'Overloader'不是一個聚合,因爲它有一個基類。另外,'make_overloader'正在接收一個通用的lambda,所以'Overloader'模板是否適當地處理這個?你能幫我嗎? – AndyG