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