AZ
constexpr bool foo(int n) { return (n % 2 == 0); }
template<bool b>
struct bar { static int value; };
template <>
struct bar<true> {
template<int n> class value { };
};
template <int n>
struct baz : bar<foo(n)> { };
baz<42>::value<3> v;
В зависимости от значения, которое вернёт функция
foo
, последняя строчка может оказаться как объявлением переменной bar<true>::value<42> v
, так и выражением (bar<false>::value < 3) > v