Похоже, я до сих пор недостаточно хорошо понимаю constexpr
C ++ и сталкиваюсь со странными аспектами почти каждый день. Здесь я хотел бы спросить об одном конкретно:
struct Part1 {
static constexpr int size = 10;
};
struct Part2 {
static constexpr int size = 24;
};
template<class ... Part>
struct Assembly {
// this does not compile ...
// static constexpr int sizeDirect = (... + Part::size);
// this works, Assembly<Part1, Part2>::sizeFromFct is 34
static constexpr int sumUp() { return (... + Part::size); }
static constexpr int sizeFromFct = sumUp();
};
Я тестирую с MSV C 2017 в соответствующем режиме (/ permissive-) и, конечно, C ++ 17.
Почему первая версия не компилируется, а вторая компилируется? Можно ли настроить sizeDirect
для работы с некоторыми настройками синтаксиса?