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-exception
6//
7//===----------------------------------------------------------------------===//
8
9// UNSUPPORTED: c++03
10// REQUIRES: has-fblocks
11// ADDITIONAL_COMPILE_FLAGS: -fblocks
12
13// <type_traits>
14
15// std::is_scalar
16
17// Make sure we report that blocks are scalar types.
18
19#include <type_traits>
20
21struct Foo { };
22template <int> struct Arg { };
23
24static_assert(std::is_scalar<void (^)(void)>::value, "");
25static_assert(std::is_scalar<void (^)()>::value, "");
26static_assert(std::is_scalar<void (^)(Arg<0>)>::value, "");
27static_assert(std::is_scalar<void (^)(Arg<0>, Arg<1>)>::value, "");
28static_assert(std::is_scalar<void (^)(Arg<0>, Arg<1>, Arg<2>)>::value, "");
29static_assert(std::is_scalar<Foo (^)(void)>::value, "");
30static_assert(std::is_scalar<Foo (^)()>::value, "");
31static_assert(std::is_scalar<Foo (^)(Arg<0>)>::value, "");
32static_assert(std::is_scalar<Foo (^)(Arg<0>, Arg<1>)>::value, "");
33static_assert(std::is_scalar<Foo (^)(Arg<0>, Arg<1>, Arg<2>)>::value, "");
34
35
36int main(int, char**) {
37 return 0;
38}
39

source code of libcxx/test/libcxx/type_traits/is_scalar.objc.pass.mm