https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64385

--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> ---
As a workaround you can simply instantiate the trait before it is used in the
function template.

Here's a reduced version of the test, which breaks when A is defined, but is
fixed by defining B:

#include <type_traits>
#include <ostream>

using trait = std::is_constructible<std::ostream, const std::ostream&>;

#if B
const bool dummy = trait::value;
#endif

#if A
template<bool> struct X { };

struct moveable_class
{
  template <typename Source>
  moveable_class(Source&& src, X<trait::value>* = 0)
  { }
};
#endif

static_assert( !trait::value, "");

Reply via email to