https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95968
Bug ID: 95968 Summary: error: 'args#0' is not a constant expression Product: gcc Version: 10.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: zakeria433 at gmail dot com Target Milestone: --- Hi, command: g++ test_class.cpp -Wall -Wextra -std=c++20 System: Debian 10 The following code is rejected by Gcc 10.1. However, if I replace test_class's constructor with constexpr instead of consteval, it does compile on gcc. // Example program #include <tuple> #include <type_traits> // #include <concepts> template<typename T, typename ... Pack> requires(std::is_floating_point<T>::value) class test_class { public: const T first_param; const std::tuple <Pack...> pack; consteval test_class(T first_param_, Pack... pack_) : first_param(first_param_), pack(pack_...) { } consteval auto test_func() { //auto p = first_param; auto x = std::apply([/*p*/](const auto ... args) {return test_class(1.0, args...);}, pack); return x; } }; int main() { constexpr auto var1 = test_class(4.0); //constexpr auto var2 = test_class(5.0); constexpr auto var3 = test_class(12.0, var1).test_func(); //static_assert(vart3.first_param == 12, "assert fail"); } error: ‘args#0’ is not a constant expression 22 | auto x = std::apply([/*p*/](const auto ... args) {return test_class(1.0, args...);}, pack); | ^~~~~~~~~~~~~~~~~~~~~~~~ Live demo: https://godbolt.org/z/oWWFaP