brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 0389ed8 Raw
78 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// UNSUPPORTED: no-threads10// UNSUPPORTED: c++03, c++11, c++1411 12// checks that CTAD works properly13 14#include <future>15#include <type_traits>16 17int func(char*);18static_assert(std::is_same_v<decltype(std::packaged_task{func}), std::packaged_task<int(char*)>>);19 20int funcn(char*) noexcept;21static_assert(std::is_same_v<decltype(std::packaged_task{funcn}), std::packaged_task<int(char*)>>);22 23template <bool Noexcept>24struct Callable {25  int operator()(char*) noexcept(Noexcept);26};27static_assert(std::is_same_v<decltype(std::packaged_task{Callable<true>{}}), std::packaged_task<int(char*)>>);28static_assert(std::is_same_v<decltype(std::packaged_task{Callable<false>{}}), std::packaged_task<int(char*)>>);29 30template <bool Noexcept>31struct CallableC {32  int operator()(char*) const noexcept(Noexcept);33};34static_assert(std::is_same_v<decltype(std::packaged_task{CallableC<true>{}}), std::packaged_task<int(char*)>>);35static_assert(std::is_same_v<decltype(std::packaged_task{CallableC<false>{}}), std::packaged_task<int(char*)>>);36 37template <bool Noexcept>38struct CallableV {39  int operator()(char*) const noexcept(Noexcept);40};41static_assert(std::is_same_v<decltype(std::packaged_task{CallableV<true>{}}), std::packaged_task<int(char*)>>);42static_assert(std::is_same_v<decltype(std::packaged_task{CallableV<false>{}}), std::packaged_task<int(char*)>>);43 44template <bool Noexcept>45struct CallableCV {46  int operator()(char*) const volatile noexcept(Noexcept);47};48static_assert(std::is_same_v<decltype(std::packaged_task{CallableCV<true>{}}), std::packaged_task<int(char*)>>);49static_assert(std::is_same_v<decltype(std::packaged_task{CallableCV<false>{}}), std::packaged_task<int(char*)>>);50 51template <bool Noexcept>52struct CallableL {53  int operator()(char*) & noexcept(Noexcept);54};55static_assert(std::is_same_v<decltype(std::packaged_task{CallableL<true>{}}), std::packaged_task<int(char*)>>);56static_assert(std::is_same_v<decltype(std::packaged_task{CallableL<false>{}}), std::packaged_task<int(char*)>>);57 58template <bool Noexcept>59struct CallableCL {60  int operator()(char*) const & noexcept(Noexcept);61};62static_assert(std::is_same_v<decltype(std::packaged_task{CallableCL<true>{}}), std::packaged_task<int(char*)>>);63static_assert(std::is_same_v<decltype(std::packaged_task{CallableCL<false>{}}), std::packaged_task<int(char*)>>);64 65template <bool Noexcept>66struct CallableVL {67  int operator()(char*) const noexcept(Noexcept);68};69static_assert(std::is_same_v<decltype(std::packaged_task{CallableVL<true>{}}), std::packaged_task<int(char*)>>);70static_assert(std::is_same_v<decltype(std::packaged_task{CallableVL<false>{}}), std::packaged_task<int(char*)>>);71 72template <bool Noexcept>73struct CallableCVL {74  int operator()(char*) const volatile & noexcept(Noexcept);75};76static_assert(std::is_same_v<decltype(std::packaged_task{CallableCVL<true>{}}), std::packaged_task<int(char*)>>);77static_assert(std::is_same_v<decltype(std::packaged_task{CallableCVL<false>{}}), std::packaged_task<int(char*)>>);78