92 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <bitset>10 11// This test ensures that we don't use a non-uglified name 'base', 'iterator',12// 'const_iterator', and `const_reference` in the implementation of bitset.13//14// See https://llvm.org/PR111125.15// See https://llvm.org/PR121618.16 17#include <cstddef>18#include <bitset>19#include <type_traits>20 21struct my_base {22 typedef int* iterator;23 typedef const int* const_iterator;24 typedef my_base base;25 typedef const int& const_reference;26 typedef std::ptrdiff_t difference_type;27 typedef std::size_t size_type;28};29 30template <std::size_t N>31struct my_derived : my_base, std::bitset<N> {};32 33static_assert(std::is_same<my_derived<0>::iterator, int*>::value, "");34static_assert(std::is_same<my_derived<1>::iterator, int*>::value, "");35static_assert(std::is_same<my_derived<8>::iterator, int*>::value, "");36static_assert(std::is_same<my_derived<12>::iterator, int*>::value, "");37static_assert(std::is_same<my_derived<16>::iterator, int*>::value, "");38static_assert(std::is_same<my_derived<32>::iterator, int*>::value, "");39static_assert(std::is_same<my_derived<48>::iterator, int*>::value, "");40static_assert(std::is_same<my_derived<64>::iterator, int*>::value, "");41static_assert(std::is_same<my_derived<96>::iterator, int*>::value, "");42 43static_assert(std::is_same<my_derived<0>::const_iterator, const int*>::value, "");44static_assert(std::is_same<my_derived<1>::const_iterator, const int*>::value, "");45static_assert(std::is_same<my_derived<8>::const_iterator, const int*>::value, "");46static_assert(std::is_same<my_derived<12>::const_iterator, const int*>::value, "");47static_assert(std::is_same<my_derived<16>::const_iterator, const int*>::value, "");48static_assert(std::is_same<my_derived<32>::const_iterator, const int*>::value, "");49static_assert(std::is_same<my_derived<48>::const_iterator, const int*>::value, "");50static_assert(std::is_same<my_derived<64>::const_iterator, const int*>::value, "");51static_assert(std::is_same<my_derived<96>::const_iterator, const int*>::value, "");52 53static_assert(std::is_same<my_derived<0>::base, my_base>::value, "");54static_assert(std::is_same<my_derived<1>::base, my_base>::value, "");55static_assert(std::is_same<my_derived<8>::base, my_base>::value, "");56static_assert(std::is_same<my_derived<12>::base, my_base>::value, "");57static_assert(std::is_same<my_derived<16>::base, my_base>::value, "");58static_assert(std::is_same<my_derived<32>::base, my_base>::value, "");59static_assert(std::is_same<my_derived<48>::base, my_base>::value, "");60static_assert(std::is_same<my_derived<64>::base, my_base>::value, "");61static_assert(std::is_same<my_derived<96>::base, my_base>::value, "");62 63static_assert(std::is_same<my_derived<0>::const_reference, const int&>::value, "");64static_assert(std::is_same<my_derived<1>::const_reference, const int&>::value, "");65static_assert(std::is_same<my_derived<8>::const_reference, const int&>::value, "");66static_assert(std::is_same<my_derived<12>::const_reference, const int&>::value, "");67static_assert(std::is_same<my_derived<16>::const_reference, const int&>::value, "");68static_assert(std::is_same<my_derived<32>::const_reference, const int&>::value, "");69static_assert(std::is_same<my_derived<48>::const_reference, const int&>::value, "");70static_assert(std::is_same<my_derived<64>::const_reference, const int&>::value, "");71static_assert(std::is_same<my_derived<96>::const_reference, const int&>::value, "");72 73static_assert(std::is_same<my_derived<0>::difference_type, std::ptrdiff_t>::value, "");74static_assert(std::is_same<my_derived<1>::difference_type, std::ptrdiff_t>::value, "");75static_assert(std::is_same<my_derived<8>::difference_type, std::ptrdiff_t>::value, "");76static_assert(std::is_same<my_derived<12>::difference_type, std::ptrdiff_t>::value, "");77static_assert(std::is_same<my_derived<16>::difference_type, std::ptrdiff_t>::value, "");78static_assert(std::is_same<my_derived<32>::difference_type, std::ptrdiff_t>::value, "");79static_assert(std::is_same<my_derived<48>::difference_type, std::ptrdiff_t>::value, "");80static_assert(std::is_same<my_derived<64>::difference_type, std::ptrdiff_t>::value, "");81static_assert(std::is_same<my_derived<96>::difference_type, std::ptrdiff_t>::value, "");82 83static_assert(std::is_same<my_derived<0>::size_type, std::size_t>::value, "");84static_assert(std::is_same<my_derived<1>::size_type, std::size_t>::value, "");85static_assert(std::is_same<my_derived<8>::size_type, std::size_t>::value, "");86static_assert(std::is_same<my_derived<12>::size_type, std::size_t>::value, "");87static_assert(std::is_same<my_derived<16>::size_type, std::size_t>::value, "");88static_assert(std::is_same<my_derived<32>::size_type, std::size_t>::value, "");89static_assert(std::is_same<my_derived<48>::size_type, std::size_t>::value, "");90static_assert(std::is_same<my_derived<64>::size_type, std::size_t>::value, "");91static_assert(std::is_same<my_derived<96>::size_type, std::size_t>::value, "");92