diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C new file mode 100644 index 0000000000..0e40e62b32 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/lambda-generic-ice1.C @@ -0,0 +1,42 @@ +// PR c++/64227 +// { dg-do compile { target c++14 } } + +template<typename T> +struct remove_reference +{ typedef T type; }; + +template<typename T> +struct remove_reference<T&> +{ typedef T type; }; + +template<typename T> +struct remove_reference<T&&> +{ typedef T type; }; + +template<typename T> +constexpr T&& +forward(typename remove_reference<T>::type& t) noexcept +{ return static_cast<T&&>(t); } + +template<typename T> +constexpr T&& +forward(typename remove_reference<T>::type&& t) noexcept +{ return static_cast<T&&>(t); } + +template<typename T> +auto greater_than(T&& t) +{ + return [val = forward<T&&>(t)] (const auto& arg) { return arg > val; }; +} + +template<typename Functor> +void g(Functor f) +{ + for (int i = 0; i < 100000; i++) + f(i); +} + +int main() +{ + g(greater_than(10)); +} |