显然,CERN 的“Root”软件(自版本 6.12 起)与 C++17 兼容。然而,我完全无法让它与最新版本(6.20)一起工作,而且我之前发现的关于这个主题的所有问题都是几年前的。
\n有 Root 经验的人知道是否有特定的编译器选项可以让它与 C++17 一起工作吗?
\n尝试编译一个简单的“Hello world”程序时遇到的错误示例:
\n/usr/local/bin/root_v6.20.02/include/ROOT/RStringView.hxx:32:84: error: conflicting declaration of template \xe2\x80\x98template<class _CharT, class _Traits> using basic_string_view = std::experimental::__ROOT::basic_string_view<_CharT, _Traits>\nRun Code Online (Sandbox Code Playgroud)\n/usr/include/c++/7/ext/concurrence.h:53:16: error: \xe2\x80\x98_Lock_policy\xe2\x80\x99 does not name a type \n static const _Lock_policy __default_lock_policy = \n ^~~~~~~~~~~~ \nIn file included from /usr/include/c++/7/iostream:38:0, \n from test.cpp:1: \n/usr/include/c++/7/ext/concurrence.h: In function \xe2\x80\x98void std::__throw_concurrence_lock_error()\xe2\x80\x99: \n/usr/include/c++/7/ext/concurrence.h:102:5: error: \xe2\x80\x98__concurrence_lock_error\xe2\x80\x99 was not declared in this scope …Run Code Online (Sandbox Code Playgroud) 我只是在学习使用std::variant,我想声明一个类型列表,它由(原则上)任意多个我的用户定义类型组成。即,像
template<typename T>
struct MyType{
T x;
};
template<typename T, int N>
MyClass{
public:
MyType<T> y;
int z = N;
double w;
MyClass(double b){
w = b;
}
};
template<typename T>
using my_type_list = std::variant<
MyClass<T,1>, MyClass<T,289>, MyClass<T,13>, ...., MyClass<T,5001>
>;
template<typename T>
std::vector<my_type_list> my_big_list = {
MyClass<T,1> { 2.0 },
MyClass<T,1> { 3.0 },
MyClass<T,289> { 9.4 },
MyClass<T, 13> { 1.3 },
MyClass<T, 5001> {2.5},
MyClass<T, 5001> {3.2},
..... etc....
};
Run Code Online (Sandbox Code Playgroud)
但N原则上整数可以是任何东西。
有什么办法可以做到吗?