2010-11-01 Jason Merrill <jason@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
+ * g++.dg/cpp0x/constexpr-initlist2.C: New.
+ * g++.dg/cpp0x/constexpr-initlist3.C: New.
+
* g++.dg/cpp0x/constexpr-array-ptr.C: New.
* g++.dg/cpp0x/constexpr-array-ptr2.C: New.
* g++.dg/cpp0x/constexpr-array-ptr3.C: New.
--- /dev/null
+// { dg-options -std=c++0x }
+
+#include <initializer_list>
+
+constexpr auto list = { 1, 2, 3, 4 };
+
+#define SA(X) static_assert(X, #X)
+SA(list.size() == 4);
+SA(list.begin()[2] == 3);
+SA(list.end()[-1] == 4);
--- /dev/null
+// { dg-options -std=c++0x }
+
+#include <initializer_list>
+#define SA(X) static_assert(X,#X)
+
+constexpr int f(std::initializer_list<int> l) { return l.begin()[0]; }
+
+int main()
+{
+ constexpr int i = f({42});
+ SA(i==42);
+}
size_type _M_len;
// The compiler can call a private constructor.
- initializer_list(const_iterator __a, size_type __l)
+ constexpr initializer_list(const_iterator __a, size_type __l)
: _M_array(__a), _M_len(__l) { }
public:
- initializer_list() : _M_array(0), _M_len(0) { }
+ constexpr initializer_list() : _M_array(0), _M_len(0) { }
// Number of elements.
- size_type
- size() const { return _M_len; }
+ constexpr size_type
+ size() { return _M_len; }
// First element.
- const_iterator
- begin() const { return _M_array; }
+ constexpr const_iterator
+ begin() { return _M_array; }
// One past the last element.
- const_iterator
- end() const { return begin() + size(); }
+ constexpr const_iterator
+ end() { return begin() + size(); }
};
/**
* @param il Initializer list.
*/
template<class _Tp>
- inline const _Tp*
+ constexpr const _Tp*
begin(initializer_list<_Tp> __ils)
{ return __ils.begin(); }
* @param il Initializer list.
*/
template<class _Tp>
- inline const _Tp*
+ constexpr const _Tp*
end(initializer_list<_Tp> __ils)
{ return __ils.end(); }
}