//@HEADER // ************************************************************************ // // Kokkos v. 4.0 // Copyright (2022) National Technology & Engineering // Solutions of Sandia, LLC (NTESS). // // Under the terms of Contract DE-NA0003525 with NTESS, // the U.S. Government retains certain rights in this software. // // Part of Kokkos, under the Apache License v2.0 with LLVM Exceptions. // See https://kokkos.org/LICENSE for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //@HEADER #include void test_nonesuch() { using Kokkos::nonesuch; static_assert(!std::is_constructible::value); static_assert(!std::is_destructible::value); static_assert(!std::is_copy_constructible::value); static_assert(!std::is_move_constructible::value); static_assert(!std::is_aggregate::value); } namespace Example { // Example from https://en.cppreference.com/w/cpp/experimental/is_detected template using copy_assign_t = decltype(std::declval() = std::declval()); struct Meow {}; struct Purr { void operator=(const Purr&) = delete; }; static_assert(Kokkos::is_detected::value, "Meow should be copy assignable!"); static_assert(!Kokkos::is_detected::value, "Purr should not be copy assignable!"); static_assert(Kokkos::is_detected_exact::value, "Copy assignment of Meow should return Meow&!"); template using diff_t = typename T::difference_type; template using difference_type = Kokkos::detected_or_t; struct Woof { using difference_type = int; }; struct Bark {}; static_assert(std::is_same, int>::value, "Woof's difference_type should be int!"); static_assert(std::is_same, std::ptrdiff_t>::value, "Bark's difference_type should be ptrdiff_t!"); } // namespace Example