blob: 926013beaf213d3a9a51e98adfde050128ce3bb3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
// <random>
// class seed_seq;
// template<class RandomAccessIterator>
// void generate(RandomAccessIterator begin, RandomAccessIterator end);
// Check the following requirement: https://eel.is/c++draft/rand.util.seedseq#7
//
// Mandates: iterator_traits<RandomAccessIterator>::value_type is an unsigned integer
// type capable of accommodating 32-bit quantities.
// UNSUPPORTED: c++03
// REQUIRES: stdlib=libc++
#include <random>
#include <climits>
#include <cstdint>
#include "test_macros.h"
void f() {
std::seed_seq seq;
// Not an integral type
{
double* p = nullptr;
seq.generate(p, p); // expected-error-re@*:* {{static assertion failed{{.+}}: [rand.util.seedseq]/7 requires{{.+}}}}
// expected-error@*:* 0+ {{invalid operands to}}
}
// Not an unsigned type
{
long long* p = nullptr;
seq.generate(p, p); // expected-error-re@*:* {{static assertion failed{{.+}}: [rand.util.seedseq]/7 requires{{.+}}}}
}
// Not a 32-bit type
{
#if UCHAR_MAX < UINT32_MAX
unsigned char* p = nullptr;
seq.generate(p, p); // expected-error-re@*:* {{static assertion failed{{.+}}: [rand.util.seedseq]/7 requires{{.+}}}}
#endif
}
// Everything satisfied
{
unsigned long* p = nullptr;
seq.generate(p, p); // no diagnostic
}
}
|