[llvm-bugs] [Bug 48606] New: Clang rejects creation of struct with mutable member during constant evaluation

via llvm-bugs llvm-bugs at lists.llvm.org
Sun Dec 27 05:36:45 PST 2020


https://bugs.llvm.org/show_bug.cgi?id=48606

            Bug ID: 48606
           Summary: Clang rejects creation of struct with mutable member
                    during constant evaluation
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: C++2a
          Assignee: unassignedclangbugs at nondot.org
          Reporter: mschellenbergercosta at googlemail.com
                CC: blitzrakete at gmail.com, erik.pilkington at gmail.com,
                    llvm-bugs at lists.llvm.org, richard-llvm at metafoo.co.uk

Consider the following code with C++20:
```
#include <memory>
struct WithMutable {
    mutable int val_{0};
};

constexpr bool createOnStack() {
    [[maybe_unused]] volatile WithMutable var;
    return true;
}

constexpr bool createOnHeap() {
    WithMutable* var = new WithMutable{};
    delete var;
    return true;
}

constexpr bool createWithAllocator() {
    WithMutable* var = std::allocator<WithMutable>{}.allocate(1);
    std::construct_at(var); 
    std::destroy_at(var);   
    std::allocator<WithMutable>{}.deallocate(var, 1);
    return true;
}

int main() {
    static_assert(createOnStack());
    static_assert(createOnHeap());
    static_assert(createWithAllocator());
}
```

Clang trunk rejects the last function `createWithAllocator` with the error
message: 
    "construction of mutable member 'val_' is not allowed in a constant
expression"

However, I cannot find any restriction on construction of mutable members
during a constant expression. Given that the other two functions are accepted
it is unclear why clang rejects the call to std::construct_at

(Godbolt link: https://godbolt.org/z/71zb7j)

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20201227/6cdd9241/attachment.html>


More information about the llvm-bugs mailing list