Próbuję użyć zwartej krotnie wyrażenie bez powodzenia.C++ składnia wyrażeń 17-krotnie?
Na przykład o to pracy C++ 17 kod
template <bool... B>
struct Fold_And : std::integral_constant<bool, (B && ...)>
{
};
template <bool... B>
constexpr auto Fold_And_v = Fold_And<B...>::value;
template <typename V, typename... Vs>
std::enable_if_t<
Fold_And_v<std::is_floating_point_v<V>,
std::is_floating_point_v<Vs>...> >
foo(const V& v, const Vs&...)
{
}
chcę przełożyć je na bardziej zwartej formie (nie używając pośredni Fold_And
)
template <typename V, typename... Vs>
std::enable_if_t<std::is_floating_point_v<V> && ... &&
std::is_floating_point_v<Vs> >
foo_compact(const V& v, const Vs&...)
{
}
jednak jest to najwyraźniej nielegalne C++, ponieważ kompilatory g ++ i clang ++ nie mogą go skompilować.
Moje pytanie:
- jest to tylko problem składni w
foo_compact()
? (Co jest słuszne?)
Albo
- krotnie wyrażenie nie może być stosowany directy złożonych podwyrażeń i nie możemy zrobić lepiej niż przy użyciu podejścia 2 etapy (
foo()
kod używającFold_And
struct)?
Argg ... błędem początkujących! Dzięki i przepraszam za hałas! –
Wyrażenia składane TIL mogą być używane jako argumenty szablonu. Ważny moment dla mnie. – StoryTeller