// Copyright (C) 2016-2021 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
// <http://www.gnu.org/licenses/>.

// { dg-do compile { target c++17 } }

#include <type_traits>

#ifndef IS_INVOCABLE_DEFINED
template<typename... T>
  constexpr bool is_invocable()
  {
    constexpr bool result = std::is_invocable_v<T...>;
    static_assert(std::is_invocable<T...>::value == result);
    return result;
  }

template<typename R, typename... T>
  constexpr bool is_invocable_r()
  {
    constexpr bool result = std::is_invocable_r_v<R, T...>;
    static_assert(std::is_invocable_r<R, T...>::value == result);
    return result;
  }
#endif

void test01()
{
  using func_type_v0 = void(*)();

  static_assert(   is_invocable< func_type_v0 >(),	    "");
  static_assert(   is_invocable_r<void,  func_type_v0 >(),  "");
  static_assert( ! is_invocable_r<void*, func_type_v0 >(),  "");
  static_assert( ! is_invocable_r<int,   func_type_v0 >(),  "");

  static_assert( ! is_invocable< func_type_v0, int >(),	      "");
  static_assert( ! is_invocable_r< void,  func_type_v0, int >(), "");
  static_assert( ! is_invocable_r< void*, func_type_v0, int >(), "");
  static_assert( ! is_invocable_r< int,   func_type_v0, int >(), "");

  using func_type_i0 = int(*)();

  static_assert(   is_invocable< func_type_i0 >(),	  "");
  static_assert(   is_invocable_r<void, func_type_i0 >(), "");
  static_assert(   is_invocable_r<int,  func_type_i0 >(), "");
  static_assert( ! is_invocable_r<int&, func_type_i0 >(), "");
  static_assert(   is_invocable_r<long, func_type_i0 >(), "");

  static_assert( ! is_invocable< func_type_i0, int >(),	     "");
  static_assert( ! is_invocable_r< void, func_type_i0, int >(), "");
  static_assert( ! is_invocable_r< int,  func_type_i0, int >(), "");
  static_assert( ! is_invocable_r< int&, func_type_i0, int >(), "");
  static_assert( ! is_invocable_r< long, func_type_i0, int >(), "");

  using func_type_l0 = int&(*)();

  static_assert(   is_invocable< func_type_l0 >(),	    "");
  static_assert(   is_invocable_r< void,  func_type_l0 >(),   "");
  static_assert(   is_invocable_r< int,   func_type_l0 >(),    "");
  static_assert(   is_invocable_r< int&,  func_type_l0 >(),   "");
  static_assert( ! is_invocable_r< int&&, func_type_l0 >(),  "");
  static_assert(   is_invocable_r< long,  func_type_l0 >(),   "");
  static_assert( ! is_invocable_r< long&, func_type_l0 >(),  "");

  static_assert( ! is_invocable< func_type_l0(int) >(),	      "");
  static_assert( ! is_invocable_r< void, func_type_l0, int >(),  "");
  static_assert( ! is_invocable_r< int,  func_type_l0, int >(),  "");
  static_assert( ! is_invocable_r< int&, func_type_l0, int >(),  "");
  static_assert( ! is_invocable_r< long, func_type_l0, int >(),  "");

  using func_type_ii = int(*)(int);

  static_assert( ! is_invocable< func_type_ii >(),	  "");
  static_assert( ! is_invocable_r< int,  func_type_ii >(), "");
  static_assert( ! is_invocable_r< int&, func_type_ii >(), "");
  static_assert( ! is_invocable_r< long, func_type_ii >(), "");

  static_assert(   is_invocable< func_type_ii, int >(),	      "");
  static_assert(   is_invocable_r< int,  func_type_ii, int >(),  "");
  static_assert( ! is_invocable_r< int&, func_type_ii, int >(),  "");
  static_assert(   is_invocable_r< long, func_type_ii, int >(),  "");

  using func_type_il = int(*)(int&);

  static_assert( ! is_invocable< func_type_il >(),	  "");

  static_assert( ! is_invocable< func_type_il, int >(),	      "");
  static_assert( ! is_invocable_r< int,  func_type_il, int >(),  "");
  static_assert( ! is_invocable_r< int&, func_type_il, int >(),  "");
  static_assert( ! is_invocable_r< long, func_type_il, int >(),  "");

  static_assert(   is_invocable< func_type_il, int& >(),	      "");
  static_assert(   is_invocable_r< int,  func_type_il, int& >(), "");
  static_assert( ! is_invocable_r< int&, func_type_il, int& >(), "");
  static_assert(   is_invocable_r< long, func_type_il, int& >(), "");

  using func_type_ir = int(*)(int&&);

  static_assert( ! is_invocable< func_type_ir >(),	  "");

  static_assert(   is_invocable< func_type_ir, int >(),	      "");
  static_assert(   is_invocable_r< int,  func_type_ir, int >(),  "");
  static_assert( ! is_invocable_r< int&, func_type_ir, int >(),  "");
  static_assert(   is_invocable_r< long, func_type_ir, int >(),  "");

  static_assert( ! is_invocable< func_type_ir, int& >(),	      "");
  static_assert( ! is_invocable_r< int,  func_type_ir, int& >(), "");
  static_assert( ! is_invocable_r< int&, func_type_ir, int& >(), "");
  static_assert( ! is_invocable_r< long, func_type_ir, int& >(), "");

  struct X { };

  using mem_type_i = int X::*;

  static_assert( ! is_invocable< mem_type_i >(),	  "");

  static_assert( ! is_invocable< mem_type_i, int >(),	    "");
  static_assert( ! is_invocable_r< int,  mem_type_i, int >(),  "");
  static_assert( ! is_invocable_r< int&, mem_type_i, int >(),  "");
  static_assert( ! is_invocable_r< long, mem_type_i, int >(),  "");

  static_assert( ! is_invocable< mem_type_i, int& >(),	    "");
  static_assert( ! is_invocable_r< int,  mem_type_i, int& >(), "");
  static_assert( ! is_invocable_r< int&, mem_type_i, int& >(), "");
  static_assert( ! is_invocable_r< long, mem_type_i, int& >(), "");

  static_assert(   is_invocable< mem_type_i, X& >(),	  "");
  static_assert(   is_invocable_r< int,  mem_type_i, X& >(), "");
  static_assert(   is_invocable_r< int&, mem_type_i, X& >(), "");
  static_assert(   is_invocable_r< long, mem_type_i, X& >(), "");

  using memfun_type_i = int (X::*)();

  static_assert( ! is_invocable< memfun_type_i >(),	 "");

  static_assert( ! is_invocable< memfun_type_i, int >(),	 "");

  static_assert( ! is_invocable< memfun_type_i, int& >(), "");

  static_assert(   is_invocable< memfun_type_i, X& >(),	      "");
  static_assert(   is_invocable_r< int,  memfun_type_i, X& >(),  "");
  static_assert( ! is_invocable_r< int&, memfun_type_i, X& >(),  "");
  static_assert(   is_invocable_r< long, memfun_type_i, X& >(),  "");
  static_assert(   is_invocable< memfun_type_i, X* >(),	      "");

  static_assert( ! is_invocable< memfun_type_i, const X& >(),	      "");
  static_assert( ! is_invocable_r< int,  memfun_type_i, const X& >(),  "");
  static_assert( ! is_invocable< memfun_type_i, X&, int >(), "");

  using memfun_type_iic = int& (X::*)(int&) const;

  static_assert( ! is_invocable< memfun_type_iic >(),		      "");
  static_assert( ! is_invocable< memfun_type_iic, int  >(),	      "");
  static_assert( ! is_invocable< memfun_type_iic, int& >(),	      "");
  static_assert( ! is_invocable< memfun_type_iic, X&, int >(),	      "");
  static_assert( ! is_invocable< memfun_type_iic, const X&, int >(),  "");
  static_assert( ! is_invocable< memfun_type_iic, const X&, int&, int  >(), "");

  static_assert(   is_invocable< memfun_type_iic, const X&, int&  >(),	   "");
  static_assert(   is_invocable_r< int,  memfun_type_iic, const X&, int& >(), "");
  static_assert(   is_invocable_r< int&, memfun_type_iic, const X&, int& >(), "");
  static_assert(   is_invocable_r< long, memfun_type_iic, const X&, int& >(), "");
  static_assert( ! is_invocable_r< long&, memfun_type_iic, const X&, int& >(),"");
  static_assert(   is_invocable< memfun_type_iic, const X*, int&  >(),	   "");

  struct F {
    int& operator()();
    long& operator()() const;
    short& operator()(int) &&;
    char& operator()(int) const&;
  private:
    void operator()(int, int);
  };
  using CF = const F;

  static_assert(   is_invocable_r< int&,   F        >(), "");
  static_assert(   is_invocable_r< int&,   F&       >(), "");
  static_assert(   is_invocable_r< long&,  CF       >(), "");
  static_assert(   is_invocable_r< long&,  CF&      >(), "");
  static_assert(   is_invocable_r< short&, F,   int >(), "");
  static_assert(   is_invocable_r< char&,  F&,  int >(), "");
  static_assert(   is_invocable_r< char&,  CF,  int >(), "");
  static_assert(   is_invocable_r< char&,  CF&, int >(), "");

  static_assert( ! is_invocable< F, int, int >(), "");
}
