https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68585
Bug ID: 68585 Summary: [5/6 Regression] c++14 code accepted by 4.9 not accepted by 5 and 6 Product: gcc Version: 5.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: doko at gcc dot gnu.org Target Milestone: --- is this code which shouldn't be accepted by 4.9? $ cat tst.cc #include <array> #include <utility> struct Pos { unsigned l,c,a; //fix g++ // constexpr Pos(unsigned l, unsigned c, unsigned a) // : l(l), c(c), a(a) // {} }; template<class T, T... Ints> constexpr std::array<Pos, 9*9> make_grid_position(std::integer_sequence<T, Ints...>) { return std::array<Pos, 9*9>{Pos{Ints / 9, Ints % 9, (Ints / 9) / 3 * 3 + (Ints % 9) / 3}...}; } constexpr std::array<Pos, 9*9> make_grid_positions() { return make_grid_position(std::make_index_sequence<9*9>{}); } template<class T> void generate_sudoku(T) { constexpr std::array<Pos, 9*9> positions = make_grid_positions(); // fail } int main() { constexpr std::array<Pos, 9*9> positions = make_grid_positions(); // ok generate_sudoku(1); } $ g++ -std=gnu++14 tst.cc tst.cc: In instantiation of 'void generate_sudoku(T) [with T = int]': tst.cc:34:20: required from here tst.cc:28:66: error: 'std::array<Pos, 81ul>{std::__array_traits<Pos, 81ul>::_Type{Pos{0u, 0u, 0u}, Pos{0u, 1u, 0u}, Pos{0u, 2u, 0u}, Pos{0u, 3u, 1u}, Pos{0u, 4u, 1u}, Pos{0u, 5u, 1u}, Pos{0u, 6u, 2u}, Pos{0u, 7u, 2u}, Pos{0u, 8u, 2u}, Pos{1u, 0u, 0u}, Pos{1u, 1u, 0u}, Pos{1u, 2u, 0u}, Pos{1u, 3u, 1u}, Pos{1u, 4u, 1u}, Pos{1u, 5u, 1u}, Pos{1u, 6u, 2u}, Pos{1u, 7u, 2u}, Pos{1u, 8u, 2u}, Pos{2u, 0u, 0u}, Pos{2u, 1u, 0u}, Pos{2u, 2u, 0u}, Pos{2u, 3u, 1u}, Pos{2u, 4u, 1u}, Pos{2u, 5u, 1u}, Pos{2u, 6u, 2u}, Pos{2u, 7u, 2u}, Pos{2u, 8u, 2u}, Pos{3u, 0u, 3u}, Pos{3u, 1u, 3u}, Pos{3u, 2u, 3u}, Pos{3u, 3u, 4u}, Pos{3u, 4u, 4u}, Pos{3u, 5u, 4u}, Pos{3u, 6u, 5u}, Pos{3u, 7u, 5u}, Pos{3u, 8u, 5u}, Pos{4u, 0u, 3u}, Pos{4u, 1u, 3u}, Pos{4u, 2u, 3u}, Pos{4u, 3u, 4u}, Pos{4u, 4u, 4u}, Pos{4u, 5u, 4u}, Pos{4u, 6u, 5u}, Pos{4u, 7u, 5u}, Pos{4u, 8u, 5u}, Pos{5u, 0u, 3u}, Pos{5u, 1u, 3u}, Pos{5u, 2u, 3u}, Pos{5u, 3u, 4u}, Pos{5u, 4u, 4u}, Pos{5u, 5u, 4u}, Pos{5u, 6u, 5u}, Pos{5u, 7u, 5u}, Pos{5u, 8u, 5u}, Pos{6u, 0u, 6u}, Pos{6u, 1u, 6u}, Pos{6u, 2u, 6u}, Pos{6u, 3u, 7u}, Pos{6u, 4u, 7u}, Pos{6u, 5u, 7u}, Pos{6u, 6u, 8u}, Pos{6u, 7u, 8u}, Pos{6u, 8u, 8u}, Pos{7u, 0u, 6u}, Pos{7u, 1u, 6u}, Pos{7u, 2u, 6u}, Pos{7u, 3u, 7u}, Pos{7u, 4u, 7u}, Pos{7u, 5u, 7u}, Pos{7u, 6u, 8u}, Pos{7u, 7u, 8u}, Pos{7u, 8u, 8u}, Pos{8u, 0u, 6u}, Pos{8u, 1u, 6u}, Pos{8u, 2u, 6u}, Pos{8u, 3u, 7u}, Pos{8u, 4u, 7u}, Pos{8u, 5u, 7u}, Pos{8u, 6u, 8u}, Pos{8u, 7u, 8u}, Pos{8u, 8u, 8u}}}' is not a constant expression constexpr std::array<Pos, 9*9> positions = make_grid_positions(); // fail ^