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
5 changed files with 39 additions and 10 deletions
|
@ -1,6 +1,9 @@
|
|||
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.
|
||||
|
|
10
gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C
Normal file
10
gcc/testsuite/g++.dg/cpp0x/constexpr-initlist2.C
Normal file
|
@ -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);
|
12
gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C
Normal file
12
gcc/testsuite/g++.dg/cpp0x/constexpr-initlist3.C
Normal file
|
@ -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>
|
||||
|
||||
PR libstdc++/45999
|
||||
|
|
|
@ -57,23 +57,23 @@ namespace std
|
|||
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(); }
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -82,7 +82,7 @@ namespace std
|
|||
* @param il Initializer list.
|
||||
*/
|
||||
template<class _Tp>
|
||||
inline const _Tp*
|
||||
constexpr const _Tp*
|
||||
begin(initializer_list<_Tp> __ils)
|
||||
{ return __ils.begin(); }
|
||||
|
||||
|
@ -92,7 +92,7 @@ namespace std
|
|||
* @param il Initializer list.
|
||||
*/
|
||||
template<class _Tp>
|
||||
inline const _Tp*
|
||||
constexpr const _Tp*
|
||||
end(initializer_list<_Tp> __ils)
|
||||
{ return __ils.end(); }
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue