//===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // [func.require] #include #include #include "test_macros.h" template struct Array { typedef T type[N]; }; struct Type { Array::type& f1(); Array::type& f2() const; #if TEST_STD_VER >= 11 Array::type& g1() &; Array::type& g2() const &; Array::type& g3() &&; Array::type& g4() const &&; #endif }; int main(int, char**) { static_assert(sizeof(std::__invoke(&Type::f1, std::declval())) == 1, ""); static_assert(sizeof(std::__invoke(&Type::f2, std::declval())) == 2, ""); #if TEST_STD_VER >= 11 static_assert(sizeof(std::__invoke(&Type::g1, std::declval())) == 1, ""); static_assert(sizeof(std::__invoke(&Type::g2, std::declval())) == 2, ""); static_assert(sizeof(std::__invoke(&Type::g3, std::declval())) == 3, ""); static_assert(sizeof(std::__invoke(&Type::g4, std::declval())) == 4, ""); #endif return 0; }