mirror of git://gcc.gnu.org/git/gcc.git
initializer_list: Decorate with constexpr.
* libsupc++/initializer_list: Decorate with constexpr. Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com> From-SVN: r166170
This commit is contained in:
parent
2bfe0527cd
commit
900484dee5
|
@ -1,6 +1,9 @@
|
||||||
2010-11-01 Jason Merrill <jason@redhat.com>
|
2010-11-01 Jason Merrill <jason@redhat.com>
|
||||||
Benjamin Kosnik <bkoz@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-ptr.C: New.
|
||||||
* g++.dg/cpp0x/constexpr-array-ptr2.C: New.
|
* g++.dg/cpp0x/constexpr-array-ptr2.C: New.
|
||||||
* g++.dg/cpp0x/constexpr-array-ptr3.C: New.
|
* g++.dg/cpp0x/constexpr-array-ptr3.C: New.
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
// { 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);
|
|
@ -0,0 +1,12 @@
|
||||||
|
// { 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);
|
||||||
|
}
|
|
@ -1,3 +1,7 @@
|
||||||
|
2010-11-01 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
* libsupc++/initializer_list: Decorate with constexpr.
|
||||||
|
|
||||||
2010-11-01 Jonathan Wakely <jwakely.gcc@gmail.com>
|
2010-11-01 Jonathan Wakely <jwakely.gcc@gmail.com>
|
||||||
|
|
||||||
PR libstdc++/45999
|
PR libstdc++/45999
|
||||||
|
|
|
@ -57,23 +57,23 @@ namespace std
|
||||||
size_type _M_len;
|
size_type _M_len;
|
||||||
|
|
||||||
// The compiler can call a private constructor.
|
// 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) { }
|
: _M_array(__a), _M_len(__l) { }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
initializer_list() : _M_array(0), _M_len(0) { }
|
constexpr initializer_list() : _M_array(0), _M_len(0) { }
|
||||||
|
|
||||||
// Number of elements.
|
// Number of elements.
|
||||||
size_type
|
constexpr size_type
|
||||||
size() const { return _M_len; }
|
size() { return _M_len; }
|
||||||
|
|
||||||
// First element.
|
// First element.
|
||||||
const_iterator
|
constexpr const_iterator
|
||||||
begin() const { return _M_array; }
|
begin() { return _M_array; }
|
||||||
|
|
||||||
// One past the last element.
|
// One past the last element.
|
||||||
const_iterator
|
constexpr const_iterator
|
||||||
end() const { return begin() + size(); }
|
end() { return begin() + size(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -82,7 +82,7 @@ namespace std
|
||||||
* @param il Initializer list.
|
* @param il Initializer list.
|
||||||
*/
|
*/
|
||||||
template<class _Tp>
|
template<class _Tp>
|
||||||
inline const _Tp*
|
constexpr const _Tp*
|
||||||
begin(initializer_list<_Tp> __ils)
|
begin(initializer_list<_Tp> __ils)
|
||||||
{ return __ils.begin(); }
|
{ return __ils.begin(); }
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ namespace std
|
||||||
* @param il Initializer list.
|
* @param il Initializer list.
|
||||||
*/
|
*/
|
||||||
template<class _Tp>
|
template<class _Tp>
|
||||||
inline const _Tp*
|
constexpr const _Tp*
|
||||||
end(initializer_list<_Tp> __ils)
|
end(initializer_list<_Tp> __ils)
|
||||||
{ return __ils.end(); }
|
{ return __ils.end(); }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue