Ich versuche, kompakter Faltenausdruck ohne Erfolg zu verwenden.C++ 17-fache Ausdruckssyntax?
Denn hier zB ein arbeitet C++ 17-Code
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&...)
{
}
ich es in eine kompaktere Form zu übersetzen
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&...)
{
}
jedoch (nicht die Zwischen Fold_And
verwenden), Dies ist anscheinend illegales C++, da sowohl g ++ - als auch clang ++ - Compiler es nicht kompilieren können.
Meine Frage:
- ist es nur ein Syntaxproblem in
foo_compact()
? (Was ist die richtige?)
Oder
- fach Ausdruck kann nicht directy mit komplexen Teilausdrücke verwendet werden, und wir können nicht besser als mit dem 2 Stufe-Ansatz (
foo()
Code mit demFold_And
struct)
argG ... Ein Anfänger-Fehler! Danke und Entschuldigung für den Lärm! –
TIL-Faltungsausdrücke können als Vorlagenargumente verwendet werden. Ein großer "Duh" -Moment für mich. – StoryTeller