//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // UNSUPPORTED: c++98, c++03 // "support/test_convertible.hpp" #include "test_convertible.hpp" struct ImplicitDefault { ImplicitDefault() {} }; static_assert(test_convertible(), "Must be convertible"); struct ExplicitDefault { explicit ExplicitDefault() {} }; static_assert(!test_convertible(), "Must not be convertible"); struct ImplicitInt { ImplicitInt(int) {} }; static_assert(test_convertible(), "Must be convertible"); struct ExplicitInt { explicit ExplicitInt(int) {} }; static_assert(!test_convertible(), "Must not be convertible"); struct ImplicitCopy { ImplicitCopy(ImplicitCopy const&) {} }; static_assert(test_convertible(), "Must be convertible"); struct ExplicitCopy { explicit ExplicitCopy(ExplicitCopy const&) {} }; static_assert(!test_convertible(), "Must not be convertible"); struct ImplicitMove { ImplicitMove(ImplicitMove&&) {} }; static_assert(test_convertible(), "Must be convertible"); struct ExplicitMove { explicit ExplicitMove(ExplicitMove&&) {} }; static_assert(!test_convertible(), "Must not be convertible"); struct ImplicitArgs { ImplicitArgs(int, int, int) {} }; static_assert(test_convertible(), "Must be convertible"); struct ExplicitArgs { explicit ExplicitArgs(int, int, int) {} }; static_assert(!test_convertible(), "Must not be convertible"); int main() { // Nothing to do }