Re: initiailizer_list and static_assert
On 2011-05-10 13:15, Marc wrote:
Daniel Kr?gler wrote:
Am 10.05.2011 00:47, schrieb Marc:
Daniel Kr=FCgler wrote:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3231.html
Nice. Adding std::get might make the constexpr tuples more useful, but
it sounds harder too.
What should be harder with a constexpr std::get function? There are
no restrictions to user-code - remember that constexpr functions can
be called with non-constant arguments. In this case they are not
different to a normal function call at all.
It seems like no function involving rvalue references is constexpr
(which makes sense). This includes forward, move, and some overload of
get.
I agree that both std::move and std::forward should really be required to be constexpr.
But if you think it is possible to make the const& overload of
get constexpr, that would be great :-)
It would also make sense to make the non-const overload of the get() template constexpr, because this would allow to propagate reference-constant expressions, e.g.
#include <tuple>
std::tuple<int> ti; // namespace-scope variable
constexpr int& ri = std::get<0>(ti); // #
constexpr int* pi = &ri; // ##
The lines marked with # and ## should also be well-formed, because with the expression 'ti' we are providing a reference-constant expression already (it is an lvalue core constant expression designating an object of static storage duration).
HTH & Greetings from Bremen,
Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]