关于C++17's Variadic using
的主题,我正在关注video。因此,出于好奇,我在这里尝试了这段代码片段,就像在我自己的IDE MS Visual Studio 2017 CE
中一样,编译器语言设置为c++17
。
#include <iostream>
#include <utility>
template<typename ... B>
struct Merged : B... {
template<typename ... T>
Merged( T && ... t ) : B( std::forward<T>( t ) )... {
}
using B::operator()...;
};
template<typename ... T>
Merged( T... ) -> Merged<std::decay_t<T>...>;
int main() {
const auto l1 = []() { return 4; };
const auto l2 = []( const int i ) { return i * 10; };
Merged merged( l1, l2, []( const double d ) { return d * 3.2; } );
std::cout << merged() << "\n";
std::cout << merged( 5 ) << "\n";
std::cout << merged( 4.5 ) << "\n";
return 0;
}
当然无法编译。然后我冒险尝试使用内置编译器的网站。我尝试使用Compiler Explorer并使用该网站上提供的大多数编译器版本为c++17
设置适当的编译器选项。他们都没能编译。我最终尝试WandBox
它似乎只为Clang
版本5.0及更高版本编译。 GCC
编译器都不会从Compiler Explorer
或WandBox
编译它,并且唯一编译和运行它的编译器是Clang
WandBox
编译器}}。
我对实际尝试这项工作并不感兴趣;我只是好奇或对视频本身的主题感兴趣。当我尝试实现代码时,对于从C ++语言的一个编译器到另一个编译器的变化有多么奇怪和显而易见。
为什么在这种特定情况下出现Clang's
版本5.0+是唯一完全支持C++17
语言功能的语言,其语法目前就是这样?