有没有办法用 clang 忽略重新定义?
Is there a way to ignore redefinition with clang?
我在编译 ROOT 脚本时遇到 Clang 编译器错误:
~/root_install/include/ROOT/RStringView.hxx:32:4: error: 使用 basic_string_view = 将 'basic_string_view' 重新定义为不同类型的符号: :std::experimental::basic_string_view<_CharT,_Traits>;
/usr/include/c++/9/string_view:90:11: 注意: 之前的定义在这里
classbasic_string_view
这是 ROOT 库中有问题的代码:
namespace std {
template<class _CharT, class _Traits = std::char_traits<_CharT> >
using basic_string_view = ::std::experimental::basic_string_view<_CharT,_Traits>;
// basic_string_view typedef names
typedef basic_string_view<char> string_view;
typedef basic_string_view<char16_t> u16string_view;
typedef basic_string_view<char32_t> u32string_view;
typedef basic_string_view<wchar_t> wstring_view;
// template<class _CharT, class _Traits = std::char_traits<_CharT> >
// basic_string_view<_CharT,_Traits>
// &operator=(basic_string_view<_CharT,_Traits> &lhs, const TString &rsh) {
// *lhs = basic_string_view<_CharT,_Traits>(rsh);
// return *lhs;
// }
#ifndef R__HAS_STOD_STRING_VIEW
inline double stod(std::string_view str, size_t *pos)
{
return std::stod(std::string(str.data(), str.size()),pos);
}
#endif
}
有没有办法在不更改库的情况下避免这个错误?使用以下命令使用 g++ 编译它就可以正常工作:\
g++ -std=c++2a file.cpp `root-config --cflags --libs`
编辑:
Clang编译命令:
clang -std=c++20 --include-directory ~/root_install/include file.cpp
ROOT 可以用 clang++
(但不能用 clang
)使用以下命令编译:
clang++ file.C`root-config --cflags --libs`
这也适用于 -std=c++20
标志。
我在编译 ROOT 脚本时遇到 Clang 编译器错误:
~/root_install/include/ROOT/RStringView.hxx:32:4: error: 使用 basic_string_view = 将 'basic_string_view' 重新定义为不同类型的符号: :std::experimental::basic_string_view<_CharT,_Traits>;
/usr/include/c++/9/string_view:90:11: 注意: 之前的定义在这里
classbasic_string_view
这是 ROOT 库中有问题的代码:
namespace std {
template<class _CharT, class _Traits = std::char_traits<_CharT> >
using basic_string_view = ::std::experimental::basic_string_view<_CharT,_Traits>;
// basic_string_view typedef names
typedef basic_string_view<char> string_view;
typedef basic_string_view<char16_t> u16string_view;
typedef basic_string_view<char32_t> u32string_view;
typedef basic_string_view<wchar_t> wstring_view;
// template<class _CharT, class _Traits = std::char_traits<_CharT> >
// basic_string_view<_CharT,_Traits>
// &operator=(basic_string_view<_CharT,_Traits> &lhs, const TString &rsh) {
// *lhs = basic_string_view<_CharT,_Traits>(rsh);
// return *lhs;
// }
#ifndef R__HAS_STOD_STRING_VIEW
inline double stod(std::string_view str, size_t *pos)
{
return std::stod(std::string(str.data(), str.size()),pos);
}
#endif
}
有没有办法在不更改库的情况下避免这个错误?使用以下命令使用 g++ 编译它就可以正常工作:\
g++ -std=c++2a file.cpp `root-config --cflags --libs`
编辑:
Clang编译命令:
clang -std=c++20 --include-directory ~/root_install/include file.cpp
ROOT 可以用 clang++
(但不能用 clang
)使用以下命令编译:
clang++ file.C`root-config --cflags --libs`
这也适用于 -std=c++20
标志。