summaryrefslogtreecommitdiffstats
path: root/Source/Checks
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2023-12-05 14:29:36 (GMT)
committerKitware Robot <kwrobot@kitware.com>2023-12-05 14:29:45 (GMT)
commit0e7ef08e1051cd58fc0f19c6759cd655dedd7206 (patch)
tree247f885fc65dd63adffc2b20e4c4ce001f950880 /Source/Checks
parent21e30404cdd32c11683730aaa264e34ee01eaf05 (diff)
parent40af103402b1a6f2d19f7531dfacb23010225392 (diff)
downloadCMake-0e7ef08e1051cd58fc0f19c6759cd655dedd7206.zip
CMake-0e7ef08e1051cd58fc0f19c6759cd655dedd7206.tar.gz
CMake-0e7ef08e1051cd58fc0f19c6759cd655dedd7206.tar.bz2
Merge topic 'RH-gcc-toolset-10-bug-check'
40af103402 cmCMakePath: do not use std::filesystem::path with RH gcc-toolset-10 Acked-by: Kitware Robot <kwrobot@kitware.com> Acked-by: buildbot <buildbot@kitware.com> Merge-request: !9026
Diffstat (limited to 'Source/Checks')
-rw-r--r--Source/Checks/cm_cxx_filesystem.cxx28
1 files changed, 28 insertions, 0 deletions
diff --git a/Source/Checks/cm_cxx_filesystem.cxx b/Source/Checks/cm_cxx_filesystem.cxx
index 732f28f..c8df589 100644
--- a/Source/Checks/cm_cxx_filesystem.cxx
+++ b/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;
}