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

            Bug ID: 99622
           Summary: Materialized temporary is not usable in a constant
                    expression
           Product: gcc
           Version: 11.0
               URL: https://godbolt.org/z/M4Ya9h
            Status: UNCONFIRMED
          Keywords: rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: johelegp at gmail dot com
                CC: johelegp at gmail dot com
  Target Milestone: ---

See https://godbolt.org/z/M4Ya9h.

```C++
const bool& b = bool{true};
static_assert(b);
```
```
<source>:2:15: error: non-constant condition for static assertion
    2 | static_assert(b);
      |               ^
<source>:2:15: error: the value of '<temporary>' is not usable in a constant
expression
<source>:1:26: note: 'bool <temporary>' is not const
    1 | const bool& b = bool{true};
      |                          ^
Compiler returned: 1
```

```C++
struct A { bool b{true}; };
const A& a = A{};
static_assert(a.b);
```
```
<source>:3:17: error: non-constant condition for static assertion
    3 | static_assert(a.b);
      |               ~~^
<source>:3:17: error: the value of '<temporary>' is not usable in a constant
expression
<source>:2:16: note: '<temporary>' was not declared 'constexpr'
    2 | const A& a = A{};
      |                ^
Compiler returned: 1
```

Reply via email to