mirror of
https://github.com/llvm-mirror/libcxx.git
synced 2025-10-21 23:30:38 +08:00

MSVC has compiler warnings C4127 "conditional expression is constant" (enabled by /W4) and C6326 "Potential comparison of a constant with another constant" (enabled by /analyze). They're potentially useful, although they're slightly annoying to library devs who know what they're doing. In the latest version of the compiler, C4127 is suppressed when the compiler sees simple tests like "if (name_of_thing)", so extracting comparison expressions into named constants is a workaround. At the same time, using std::integral_constant avoids C6326, which doesn't look at template arguments. test/std/containers/sequences/vector.bool/emplace.pass.cpp Replace 1 == 1 with true, which is the same as far as the library is concerned. Fixes D28837. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@292432 91177308-0d34-0410-b5e6-96231b3b80d8
72 lines
1.8 KiB
C++
72 lines
1.8 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is dual licensed under the MIT and the University of Illinois Open
|
|
// Source Licenses. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
// test bitset<N>::reference operator[](size_t pos);
|
|
|
|
#include <bitset>
|
|
#include <type_traits>
|
|
#include <cstdlib>
|
|
#include <cassert>
|
|
|
|
#if defined(__clang__)
|
|
#pragma clang diagnostic ignored "-Wtautological-compare"
|
|
#endif
|
|
|
|
template <std::size_t N>
|
|
std::bitset<N>
|
|
make_bitset()
|
|
{
|
|
std::bitset<N> v;
|
|
for (std::size_t i = 0; i < N; ++i)
|
|
v[i] = static_cast<bool>(std::rand() & 1);
|
|
return v;
|
|
}
|
|
|
|
template <std::size_t N>
|
|
void test_index_const()
|
|
{
|
|
std::bitset<N> v1 = make_bitset<N>();
|
|
const bool greater_than_0 = std::integral_constant<bool, (N > 0)>::value; // avoid compiler warnings
|
|
if (greater_than_0)
|
|
{
|
|
assert(v1[N/2] == v1.test(N/2));
|
|
typename std::bitset<N>::reference r = v1[N/2];
|
|
assert(r == v1.test(N/2));
|
|
typename std::bitset<N>::reference r2 = v1[N/2];
|
|
r = r2;
|
|
assert(r == v1.test(N/2));
|
|
r = false;
|
|
assert(r == false);
|
|
assert(v1.test(N/2) == false);
|
|
r = true;
|
|
assert(r == true);
|
|
assert(v1.test(N/2) == true);
|
|
bool b = ~r;
|
|
assert(r == true);
|
|
assert(v1.test(N/2) == true);
|
|
assert(b == false);
|
|
r.flip();
|
|
assert(r == false);
|
|
assert(v1.test(N/2) == false);
|
|
}
|
|
}
|
|
|
|
int main()
|
|
{
|
|
test_index_const<0>();
|
|
test_index_const<1>();
|
|
test_index_const<31>();
|
|
test_index_const<32>();
|
|
test_index_const<33>();
|
|
test_index_const<63>();
|
|
test_index_const<64>();
|
|
test_index_const<65>();
|
|
test_index_const<1000>();
|
|
}
|