|
|
@@ -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;
|
|
|
}
|