@@ -16,25 +16,25 @@ template <class SF>
1616struct RandomAccessAt {
1717 MemLayout::size_t i;
1818 template <class ... Args>
19- constexpr SF operator ()(Args& ...args) const { return {{ args[i]...} }; }
19+ constexpr SF operator ()(Args& ...args) const { return {args[i]...}; }
2020 template <class ... Args>
21- constexpr SF operator ()(const Args& ...args) const { return {{ args[i]...} }; }
21+ constexpr SF operator ()(const Args& ...args) const { return {args[i]...}; }
2222};
2323
2424template <class SF >
2525struct GetPointer {
2626 template <class ... Args>
27- constexpr SF operator ()(Args& ...args) const { return {{ &args...} }; }
27+ constexpr SF operator ()(Args& ...args) const { return {&args...}; }
2828 template <class ... Args>
29- constexpr SF operator ()(const Args& ...args) const { return {{ &args...} }; }
29+ constexpr SF operator ()(const Args& ...args) const { return {&args...}; }
3030};
3131
3232template <class SF >
3333struct AggregateConstructor {
3434 template <class ... Args>
35- constexpr SF operator ()(Args& ...args) const { return {{ args...} }; }
35+ constexpr SF operator ()(Args& ...args) const { return {args...}; }
3636 template <class ... Args>
37- constexpr SF operator ()(const Args& ...args) const { return {{ args...}} ; }
37+ constexpr SF operator ()(const Args& ...args) const { return {args...}; }
3838};
3939
4040struct FirstMember {
@@ -47,20 +47,20 @@ struct FirstMember {
4747template <class SF >
4848struct PreIncrement {
4949 template <class ... Args>
50- constexpr SF operator ()(Args& ...args) const { return {{ ++args...} }; }
50+ constexpr SF operator ()(Args& ...args) const { return {++args...}; }
5151};
5252
5353template <class SF >
5454struct PreDecrement {
5555 template <class ... Args>
56- constexpr SF operator ()(Args& ...args) const { return {{ --args...} }; }
56+ constexpr SF operator ()(Args& ...args) const { return {--args...}; }
5757};
5858
5959template <class SF >
6060struct Advance {
6161 ptrdiff_t i;
6262 template <class ... Args>
63- constexpr SF operator ()(const Args& ...args) const { return {{ (args + i)...} }; }
63+ constexpr SF operator ()(const Args& ...args) const { return {(args + i)...}; }
6464};
6565
6666struct CopyAssignment {
@@ -78,10 +78,10 @@ struct wrapper : public S<F> {
7878 constexpr wrapper () = default;
7979 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
8080 template <template <class > class F_other >
81- constexpr wrapper (wrapper<S, F_other>& other) : Base{other.apply (AggregateConstructor<wrapper >{})} {}
81+ constexpr wrapper (S< F_other>& other) : Base{other.apply (AggregateConstructor<Base >{})} {}
8282
83- constexpr wrapper<S, reference> operator [] (size_t i) { return Base::apply (RandomAccessAt<wrapper<S, reference>>{i}); }
84- constexpr wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<wrapper<S, const_reference>>{i}); }
83+ constexpr wrapper<S, reference> operator [] (size_t i) { return Base::apply (RandomAccessAt<S< reference>>{i}); }
84+ constexpr wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<S< const_reference>>{i}); }
8585
8686 constexpr wrapper<S, reference> operator *() { return operator [](0 ); }
8787 constexpr wrapper<S, const_reference> operator *(ptrdiff_t ) const { return operator [](0 ); }
@@ -93,8 +93,8 @@ struct wrapper<S, value> : public S<value> {
9393
9494 constexpr wrapper () = default;
9595 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
96- constexpr wrapper (wrapper<S, reference> other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
97- constexpr wrapper (wrapper<S, const_reference> other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
96+ constexpr wrapper (const S< reference>& other) : Base(other.apply(AggregateConstructor<Base >{})) {}
97+ constexpr wrapper (const S< const_reference> other) : Base(other.apply(AggregateConstructor<Base >{})) {}
9898
9999 // constexpr S<MemLayout::pointer> operator& () { return apply(GetPointer<S<MemLayout::pointer>>{}); }
100100 // constexpr S<MemLayout::const_pointer> operator& () const { return apply(GetPointer<S<MemLayout::const_pointer>>{}); }
@@ -106,7 +106,7 @@ struct wrapper<S, reference> : public S<reference> {
106106
107107 constexpr wrapper () = delete;
108108 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
109- constexpr wrapper (wrapper<S, value>& other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
109+ constexpr wrapper (S< value>& other) : Base(other.apply(AggregateConstructor<Base >{})) {}
110110
111111 constexpr wrapper (const wrapper& other) = default;
112112
@@ -127,8 +127,8 @@ struct wrapper<S, reference> : public S<reference> {
127127
128128 constexpr wrapper& operator =(wrapper&& other) { return operator =(other); }
129129
130- constexpr wrapper<S, pointer> operator & () { return Base::apply (GetPointer<wrapper<S, pointer>>{}); }
131- // constexpr wrapper<S, const_pointer> operator& () const { return Base::apply(GetPointer<wrapper<S, const_pointer>>{}); }
130+ constexpr wrapper<S, pointer> operator & () { return Base::apply (GetPointer<S< pointer>>{}); }
131+ // constexpr wrapper<S, const_pointer> operator& () const { return Base::apply(GetPointer<S< const_pointer>>{}); }
132132};
133133
134134template <template <template <class > class > class S >
@@ -137,10 +137,10 @@ struct wrapper<S, const_reference> : public S<const_reference> {
137137
138138 constexpr wrapper () = delete;
139139 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
140- constexpr wrapper (const wrapper<S, value>& other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
141- constexpr wrapper (const wrapper<S, reference>& other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
140+ constexpr wrapper (const S< value>& other) : Base(other.apply(AggregateConstructor<Base >{})) {}
141+ constexpr wrapper (const S< reference>& other) : Base(other.apply(AggregateConstructor<Base >{})) {}
142142
143- constexpr wrapper<S, const_pointer> operator &() const { return Base::apply (GetPointer<wrapper<S, const_pointer>>{}); }
143+ constexpr wrapper<S, const_pointer> operator &() const { return Base::apply (GetPointer<S< const_pointer>>{}); }
144144};
145145
146146template <template <template <class > class > class S >
@@ -150,8 +150,8 @@ struct wrapper<S, pointer> : public S<pointer> {
150150 constexpr wrapper () = default;
151151 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
152152
153- constexpr wrapper<S, reference> operator [] (size_t i) { return Base::apply (RandomAccessAt<wrapper<S, reference>>{i}); }
154- constexpr wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<wrapper<S, const_reference>>{i}); }
153+ constexpr wrapper<S, reference> operator [] (size_t i) { return Base::apply (RandomAccessAt<S< reference>>{i}); }
154+ constexpr const wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<S< const_reference>>{i}); }
155155
156156 constexpr wrapper<S, reference> operator *() { return operator [](0 ); }
157157 constexpr wrapper<S, const_reference> operator *() const { return operator [](0 ); }
@@ -160,13 +160,13 @@ struct wrapper<S, pointer> : public S<pointer> {
160160 constexpr bool operator !=(const wrapper& other) const { return !this ->operator ==(other); }
161161 constexpr bool operator <(const wrapper& other) const { return Base::apply (FirstMember{}) < other.apply (FirstMember{}); }
162162
163- constexpr wrapper operator +(ptrdiff_t i) const { return Base::apply (Advance<wrapper >{i}); }
163+ constexpr wrapper operator +(ptrdiff_t i) const { return Base::apply (Advance<Base >{i}); }
164164 constexpr wrapper operator -(ptrdiff_t i) const { return operator +(-i); }
165165 constexpr ptrdiff_t operator -(const wrapper& other) const { return Base::apply (FirstMember{}) - other.apply (FirstMember{}); }
166166
167- constexpr wrapper& operator ++() { Base::apply (PreIncrement<wrapper >{}); return *this ; }
167+ constexpr wrapper& operator ++() { Base::apply (PreIncrement<Base >{}); return *this ; }
168168 constexpr wrapper& operator +=(ptrdiff_t i) { return *this = *this + i; }
169- constexpr wrapper& operator --() { Base::apply (PreDecrement<wrapper >{}); return *this ; }
169+ constexpr wrapper& operator --() { Base::apply (PreDecrement<Base >{}); return *this ; }
170170 constexpr wrapper& operator -=(ptrdiff_t i) { return *this = *this - i; }
171171};
172172
@@ -176,9 +176,9 @@ struct wrapper<S, const_pointer> : public S<const_pointer> {
176176
177177 constexpr wrapper () = default;
178178 constexpr wrapper (Base b) : Base{static_cast <Base&&>(b)} {}
179- constexpr wrapper (wrapper<S, pointer> other) : Base(other.apply(AggregateConstructor<wrapper >{})) {}
179+ constexpr wrapper (const S< pointer>& other) : Base(other.apply(AggregateConstructor<Base >{})) {}
180180
181- constexpr wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<wrapper<S, const_reference>>{i}); }
181+ constexpr wrapper<S, const_reference> operator [] (size_t i) const { return Base::apply (RandomAccessAt<S< const_reference>>{i}); }
182182 constexpr wrapper<S, const_reference> operator *() const { return operator [](0 ); }
183183};
184184
0 commit comments