[Bug c++/77446] New: Suspicious "non-constant condition for static assertion" error
TonyELewis at hotmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Sep 1 14:33:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77446
Bug ID: 77446
Summary: Suspicious "non-constant condition for static
assertion" error
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: TonyELewis at hotmail dot com
Target Milestone: ---
I'm compiling the following under C++14 mode on HEAD 7.0.0 201608 of
http://melpon.org/wandbox/
struct inner {
int field_a = 0;
bool field_b = false;
explicit constexpr inner(const int &arg_field_a) noexcept : field_a{
arg_field_a } {}
};
struct outer {
inner the_inner = inner{ 0 };
constexpr outer() noexcept = default;
constexpr int set_inner(const inner &arg_inner) {
the_inner = arg_inner;
return 0;
}
};
constexpr inner another_inner{ 1 };
static_assert( outer{}.set_inner( another_inner ) == 0, "" );
int main() {}
...and seeing this error:
prog.cc:19:1: error: non-constant condition for static assertion
static_assert( outer{}.set_inner( another_inner ) == 0, "" );
^~~~~~~~~~~~~
I suspect this is a compiler error, particularly because;
* Commenting out the field_b line makes it work.
* Clang compiles this without complaint.
* The error message appears to be inconsistent, sometimes gaining the
following messages after the messages above...
prog.cc:19:33: in constexpr expansion of
'outer{inner(0)}.outer::set_inner(another_inner)'
prog.cc:19:1: error: accessing value of '<anonymous>.outer::the_inner' through
a 'char [5]' glvalue in a constant expression
Many apologies if this is a false positive.
Many thanks for all your hard work on this wonderful compiler.
More information about the Gcc-bugs
mailing list