Pārlūkot izejas kodu

Merge topic 'RH-gcc-toolset-10-bug-check' into release-3.28

40af103402 cmCMakePath: do not use std::filesystem::path with RH gcc-toolset-10

Acked-by: Kitware Robot <[email protected]>
Acked-by: buildbot <[email protected]>
Merge-request: !9026
Brad King 1 gadu atpakaļ
vecāks
revīzija
3e8f021137
1 mainītis faili ar 28 papildinājumiem un 0 dzēšanām
  1. 28 0
      Source/Checks/cm_cxx_filesystem.cxx

+ 28 - 0
Source/Checks/cm_cxx_filesystem.cxx

@@ -1,5 +1,8 @@
 
 #include <filesystem>
+#if defined(__GLIBCXX__)
+#  include <string_view>
+#endif
 
 int main()
 {
@@ -34,5 +37,30 @@ int main()
   p5.remove_filename();
 #endif
 
+#if defined(__GLIBCXX__)
+  // RH gcc-toolset-10 has a strange bug: it selects, in some circumstances,
+  // the wrong constructor which generate error in template instantiation.
+  class my_string_view : std::string_view
+  {
+  public:
+    my_string_view(const char* p)
+      : std::string_view(p)
+    {
+    }
+  };
+  class my_path
+  {
+  public:
+    my_path(std::filesystem::path path) {}
+
+    my_path(my_string_view path) {}
+  };
+
+  my_path p{ my_string_view{ "abc" } };
+  // here is the bug: the constructor taking std::filesystem::path as argument
+  // is selected, so the compiler try to build a std::filesystem::path instance
+  // from the my_string_view argument and fails to do so.
+#endif
+
   return 0;
 }