有没有办法用 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 标志。