Clang and GCC don't seem to agree about what makes a type default constructible. Is GCC wrong here? Is the formal definition of the standard not clear about this?
#include <concepts>
class base {
protected:
base() = default;
};
struct der : base {
using base::base;
der(int) {}
};
der d; // constexpr base::base() is protected within this context
static_assert(std::semiregular<der>); // fails on GCC
JHBonarius and alagner have provided the requested information, referring to already existing sources that cover the details pretty well. For now, I think it's best to direct this question more towards Clang's deviating behavior. I've initiated the bug-reporting process and will post any follow ups here.