libcxx

libcxx mirror with random patches
git clone https://git.neptards.moe/neptards/libcxx.git
Log | Files | Refs

test_convertible_header.pass.cpp (1947B)


      1 //===----------------------------------------------------------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is dual licensed under the MIT and the University of Illinois Open
      6 // Source Licenses. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 // UNSUPPORTED: c++98, c++03
     11 
     12 // "support/test_convertible.hpp"
     13 
     14 #include "test_convertible.hpp"
     15 
     16 struct ImplicitDefault {
     17   ImplicitDefault() {}
     18 };
     19 static_assert(test_convertible<ImplicitDefault>(), "Must be convertible");
     20 
     21 struct ExplicitDefault {
     22   explicit ExplicitDefault() {}
     23 };
     24 static_assert(!test_convertible<ExplicitDefault>(), "Must not be convertible");
     25 
     26 struct ImplicitInt {
     27   ImplicitInt(int) {}
     28 };
     29 static_assert(test_convertible<ImplicitInt, int>(), "Must be convertible");
     30 
     31 struct ExplicitInt {
     32   explicit ExplicitInt(int) {}
     33 };
     34 static_assert(!test_convertible<ExplicitInt, int>(), "Must not be convertible");
     35 
     36 struct ImplicitCopy {
     37   ImplicitCopy(ImplicitCopy const&) {}
     38 };
     39 static_assert(test_convertible<ImplicitCopy, ImplicitCopy>(), "Must be convertible");
     40 
     41 struct ExplicitCopy {
     42   explicit ExplicitCopy(ExplicitCopy const&) {}
     43 };
     44 static_assert(!test_convertible<ExplicitCopy, ExplicitCopy>(), "Must not be convertible");
     45 
     46 struct ImplicitMove {
     47   ImplicitMove(ImplicitMove&&) {}
     48 };
     49 static_assert(test_convertible<ImplicitMove, ImplicitMove>(), "Must be convertible");
     50 
     51 struct ExplicitMove {
     52   explicit ExplicitMove(ExplicitMove&&) {}
     53 };
     54 static_assert(!test_convertible<ExplicitMove, ExplicitMove>(), "Must not be convertible");
     55 
     56 struct ImplicitArgs {
     57   ImplicitArgs(int, int, int) {}
     58 };
     59 static_assert(test_convertible<ImplicitArgs, int, int, int>(), "Must be convertible");
     60 
     61 struct ExplicitArgs {
     62   explicit ExplicitArgs(int, int, int) {}
     63 };
     64 static_assert(!test_convertible<ExplicitArgs, int, int, int>(), "Must not be convertible");
     65 
     66 int main() {
     67     // Nothing to do
     68 }