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

            Bug ID: 109159
           Summary: explicit constructor is used in copy-initialization
           Product: gcc
           Version: 12.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

The following code must be accepted (as it does in Clang and MSVC):

struct A {
    A( float ) {}
    template<class U>
    explicit A( U ) {}
};

template<class T>
concept CopyFromIntList = requires( T t ) { t = { 1 }; };

static_assert( !CopyFromIntList<A> );

because 't = {1}' is invalid: chosen constructor is explicit in
copy-initialization.

But in GCC static_assert fails. Online demo:
https://gcc.godbolt.org/z/Pf47E6dno

Reply via email to