Skip to content

[Clang] __is_trivially_assignable returning true with deleted member #90605

Open
@philnik777

Description

@philnik777

In C++03, Clang claims that a struct containing a member with a deleted assignment operator is assignable, but diagnoses the instantiation as using a deleted function.

struct Element {
    Element& operator=(const Element&) = delete;
};

struct S {
    Element i;

    S& operator=(const S&) = default;
};

_Static_assert(!__is_trivially_assignable(S&, const S&)); // assertion fails
_Static_assert(!__is_assignable(S&, const S&)); // assertion fails

void test() {
    S s;
    S s2;
    s2 = s; // diagnosed as an error
}

(Godbolt)

Metadata

Metadata

Assignees

No one assigned

    Labels

    clang:frontendLanguage frontend issues, e.g. anything involving "Sema"rejects-valid

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions