我阅读了有关using function declaration的内容,并希望编译最后一个示例。这是 :
#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似乎都无法对其进行编译。我可以尝试使用任何编译器的地方吗?
最佳答案
P0195,建议的语言扩展允许:
template <typename... Ts>
struct Overloader : Ts... {
using Ts::operator()...; // <== ill-formed without p0195
};
几周前(2016年11月)才在Issaquah被C++接受。 gcc或clang尚未实现它也就不足为奇了。给他们时间。
现在的解决方法是为
Overloader
创建一个线性层次结构。