20 Stimmen

Wie kann man ein constexpr std::tuple zur Kompilierzeit abfragen?

In C++0x kann man ein constexpr std::tuple erstellen, z. B. wie

#include <tuple>
constexpr int i = 10;
constexpr float f = 2.4f;
constexpr double d = -10.4;
constexpr std::tuple<int, float, double> tup(i, f, d);

Man kann ein std::tuple auch zur Laufzeit abfragen, z.B. über

int i2 = std::get<0>(tup);

Es ist jedoch nicht möglich, sie zur Kompilierungszeit abzufragen, z. B.,

constexpr int i2 = std::get<0>(tup);

wird einen Kompilierungsfehler auslösen (zumindest mit dem neuesten g++ Snapshot 2011-02-19).

Gibt es eine andere Möglichkeit, ein constexpr std::tuple zur Kompilierungszeit abzufragen?

Und wenn nicht, gibt es einen konzeptionellen Grund, warum man sie nicht abfragen sollte?

(Ich weiß, dass man die Verwendung von std::tuple vermeiden kann, z. B. durch Verwendung von boost::mpl oder boost::fusion, aber irgendwie klingt es falsch, die Tupel-Klasse nicht zu verwenden im neuen Standard zu verwenden...).

Übrigens, weiß jemand, warum

  constexpr std::tuple<int, float, double> tup(i, f, d);

kompiliert gut, aber

  constexpr std::tuple<int, float, double> tup(10, 2.4f, -10.4);

nicht?

Vielen Dank im Voraus! - lars

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X