https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121521
--- Comment #1 from Desmond Gold <cooky.ykooc922 at gmail dot com> --- Edited testcase: #include <array> #include <tuple> struct Point { int x, y, z; }; int main() { constexpr int arr[] {1, 2, 3}; constexpr auto [a, b, c] = arr; static constexpr std::array std_arr {4, 5, 6}; constexpr auto [d, e, f] = std_arr; // error constexpr auto [g, h, i] = std::array{42, 91, 72}; // error constexpr auto [j, k] = std::make_tuple(1, 3.14f); // error constexpr auto [l, m] = std::pair {'A', true}; // error constexpr auto [x, y, z] = Point {9, 0, -4}; } In general, it rejects lines that accept objects of types with tuple protocol.