https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87999
Bug ID: 87999 Summary: Constexpr eval. in static_assert makes string_view comparison non constexpr Product: gcc Version: 9.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: wieichdashasse at gmail dot com Target Milestone: --- Hey, I see an inconsistency when using gcc compared to other compilers when using a constexpr return directly in a (constexpr) static_assert ================================ Minimal repro: #include <string_view> constexpr bool IsValid_impl (std::string_view name) { return name == "Steve"; } template<typename F> constexpr void IsValid(F func) { // Using it via intermediate will make it work // constexpr auto tmp = IsValid_impl(func()); // static_assert(tmp); static_assert(IsValid_impl(func())); } int main() { IsValid([]{ return "Steve";}); } (as featured in https://godbolt.org/z/YCVMRp) ================================ Output: test.cpp: In instantiation of 'constexpr void IsValid(F) [with F = main()::<lambda()>]': prog.cpp: In instantiation of 'constexpr void IsValid(F) [with F = main()::<lambda()>]': prog.cpp:20:46: required from here prog.cpp:15:31: error: non-constant condition for static assertion 15 | static_assert(IsValid_impl(func())); | ~~~~~~~~~~~~^~~~~~~~ Adding the intermediate makes it work, hence i think it is a bug. I've tested this on 8.2.0, 9.0, 7.3.0 and 7.2.0 Cheers, Justin Meyer