Add __builtion_unreachable to vector::size(), vector::capacity()
[official-gcc.git] / gcc / testsuite / g++.dg / cpp1y / constexpr-108158.C
blobe5f5e9954e5e619762608392c79c49379f4ea0eb
1 // PR c++/108158
2 // { dg-do compile { target c++14 } }
4 template <class T, int N> struct carray {
5   T data_[N]{};
6   constexpr T operator[](long index) const { return data_[index]; }
7 };
8 struct seed_or_index {
9 private:
10   long value_ = 0;
12 template <int M> struct pmh_tables {
13   carray<seed_or_index, M> first_table_;
14   template <typename KeyType, typename HasherType>
15   constexpr void lookup(KeyType, HasherType) const {
16     first_table_[0];
17   }
19 template <int N> struct unordered_set {
20   int equal_;
21   carray<int, N> keys_;
22   pmh_tables<N> tables_;
23   constexpr unordered_set() : equal_{} {}
24   template <class KeyType, class Hasher>
25   constexpr auto lookup(KeyType key, Hasher hash) const {
26     tables_.lookup(key, hash);
27     return keys_;
28   }
30 constexpr unordered_set<3> ze_set;
31 constexpr auto nocount = ze_set.lookup(4, int());
32 constexpr auto nocount2 = unordered_set<3>{}.lookup(4, int());