https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100630
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2021-05-17
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Romain Geissler from comment #0)
> Hi,
>
> I came across this issue today (which I think is unexpected) with gcc 8, 9
> and 10. It seems that the following code triggers some implicit conversion
> from volatile bool& to std::filesystem::path while this was definitely not
> the intention:
It's not triggering such a conversion, it's checking if such a conversion is
viable as part of overload resolution. But then that instantiates something
that is ill-formed and fails with an error outside the immediate context.
I think the right fix for the branches is:
--- a/libstdc++-v3/include/bits/fs_path.h
+++ b/libstdc++-v3/include/bits/fs_path.h
@@ -116,7 +116,7 @@ namespace __detail
template<typename _Source>
struct __constructible_from<_Source, void>
- : decltype(__is_path_src(std::declval<_Source>(), 0))
+ : decltype(__is_path_src(std::declval<const _Source&>(), 0))
{ };
template<typename _Tp1, typename _Tp2 = void>