Betrachten Sie das folgende Beispiel minimal:Falten Ausdrücke und leere Parameter Pack: Was ist das erwartete Ergebnis?
#include<cstddef>
template<std::size_t... I>
constexpr auto sum() { return (I + ...); }
template<bool... B>
constexpr auto check() { return (B && ...); }
int main() {
static_assert(6 == sum<1,2,3>(), "!");
// static_assert(0 == sum<>(), "!");
static_assert(check<true, true>(), "!");
static_assert(check<>(), "!");
}
Die Kommentarzeile nicht kompiliert.
Das gleiche gilt für *
anstelle von +
.
Der Boolean funktioniert stattdessen.
Here (Arbeitsentwurf) Ich habe keine Erwähnungen über leere Parameterpakete gefunden.
Auf der anderen Seite, here (ISOCCP) scheint es, dass das Standardergebnis in dem obigen Fall int()
ist.
Was ist genau das erwartete Verhalten beim Mischen von Faltexpressionen und einem leeren Parameterpaket?
Ich wäre neugierig zu wissen, warum diese Betreiber ausgesondert wurden, anstatt sie alle schlecht geformt zu machen. – Borgleader
@Borgleader: Siehe [P0036R0] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0036r0.pdf). Allerdings sagt [P0160R0] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0160r0.html), dass Standardwerte für leere Parameterpakete so aufgelöst wurden, dass sie vollständig entfernt wurden. Ich bin mir nicht sicher, was sich geändert hat oder warum dies im aktuellen Entwurf nicht berücksichtigt wird. – ildjarn
@ildjarn Das hat im Plenum keinen Konsens gefunden, also haben sie letztendlich P0036 gewählt. –