Инициализация члена класса stati c constexpr в зависимости от типа аргумента шаблона - PullRequest
1 голос
/ 05 мая 2020

Похоже, я до сих пор недостаточно хорошо понимаю 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 для работы с некоторыми настройками синтаксиса?

...