// { dg-do compile { target c++11 } } // 2009-11-12 Paolo Carlini // // Copyright (C) 2009-2023 Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the // terms of the GNU General Public License as published by the // Free Software Foundation; either version 3, or (at your option) // any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this library; see the file COPYING3. If not see // . #include template struct is_convertible_mini { private: typedef char one; typedef struct { char arr[2]; } two; static one test(To); static two test(...); public: static const bool value = sizeof(test(std::declval())) == 1; }; template const bool is_convertible_mini::value; void test01() { static_assert(is_convertible_mini::value, "#1"); static_assert(!is_convertible_mini::value, "#2"); static_assert(is_convertible_mini::value, "#3"); static_assert(!is_convertible_mini::value, "#4"); static_assert(is_convertible_mini::value, "#5"); static_assert(!is_convertible_mini::value, "#6"); }