std::initializer_list で constexpr
規格の方は確認してないんですが、gcc 4.7 では動作しました。
[ソース]
#include <initializer_list> template<typename T> constexpr auto front(std::initializer_list<T> list) ->decltype(*list.begin()){ return *list.begin(); } template<typename T> constexpr auto at(std::initializer_list<T> list, std::size_t index) ->decltype(*(list.begin() + index)){ return *(list.begin() + index); } constexpr int plus(int a, int b){ return a + b; } int main(){ static_assert(front({1, 2, 3}) == 1, ""); constexpr auto list = {1, 2, 3}; static_assert(at(list, 0) == 1, ""); static_assert(at(list, 1) == 2, ""); static_assert(at(list, 2) == 3, ""); static_assert(plus(at(list, 1), at(list, 2)) == 5, ""); return 0; }