comparison gcc/testsuite/g++.dg/cpp1z/constexpr-tracking-const1.C @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
comparison
equal deleted inserted replaced
131:84e7813d76e9 145:1830386684a0
1 // PR c++/91548 - fix detecting modifying const objects for ARRAY_REF.
2 // { dg-do compile { target c++17 } }
3
4 using size_t = decltype(sizeof(0));
5
6 template <typename T, size_t N>
7 constexpr T& impl(T const (&array)[N], size_t index) {
8 return const_cast<T&>(array[index]);
9 }
10
11 template <typename T, size_t N>
12 struct my_array {
13 constexpr T& operator[](size_t i) { return impl(elems, i); }
14 constexpr T const& operator[](size_t i) const { return elems[i]; }
15 T elems[N];
16 };
17
18 bool f(int i) {
19 static constexpr auto table = []() {
20 my_array<bool, 256> arr = {};
21 arr[2] = true;
22 return arr;
23 }();
24 return table[i];
25 }