1 /*<- 2 Distributed under the Boost Software License, Version 1.0. 3 (See accompanying file LICENSE.md or copy at http ://boost.org/LICENSE_1_0.txt) 4 ->*/ 5 //[ hideous_template 6 template<typename T> struct foo; 7 8 template<class Return, class... Args> struct foo<Return(Args...)> {}; 9 template<class Return, class... Args> struct foo<Return(Args...) &> {}; 10 template<class Return, class... Args> struct foo<Return(Args...) &&> {}; 11 template<class Return, class... Args> struct foo<Return(Args...) const> {}; 12 template<class Return, class... Args> struct foo<Return(Args...) const &> {}; 13 template<class Return, class... Args> struct foo<Return(Args...) const &&> {}; 14 template<class Return, class... Args> struct foo<Return(Args...) volatile> {}; 15 template<class Return, class... Args> struct foo<Return(Args...) volatile &> {}; 16 template<class Return, class... Args> struct foo<Return(Args...) volatile &&> {}; 17 template<class Return, class... Args> struct foo<Return(Args...) const volatile> {}; 18 template<class Return, class... Args> struct foo<Return(Args...) const volatile &> {}; 19 template<class Return, class... Args> struct foo<Return(Args...) const volatile &&> {}; 20 template<class Return, class... Args> struct foo<Return(Args..., ...)> {}; 21 template<class Return, class... Args> struct foo<Return(Args..., ...) &> {}; 22 template<class Return, class... Args> struct foo<Return(Args..., ...) &&> {}; 23 template<class Return, class... Args> struct foo<Return(Args..., ...) const> {}; 24 template<class Return, class... Args> struct foo<Return(Args..., ...) const &> {}; 25 template<class Return, class... Args> struct foo<Return(Args..., ...) const &&> {}; 26 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile> {}; 27 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile &> {}; 28 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile &&> {}; 29 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile> {}; 30 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile &> {}; 31 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile &&> {}; 32 template<class Return, class... Args> struct foo<Return(Args...) noexcept> {}; 33 template<class Return, class... Args> struct foo<Return(Args...) & noexcept> {}; 34 template<class Return, class... Args> struct foo<Return(Args...) && noexcept> {}; 35 template<class Return, class... Args> struct foo<Return(Args...) const noexcept> {}; 36 template<class Return, class... Args> struct foo<Return(Args...) const & noexcept> {}; 37 template<class Return, class... Args> struct foo<Return(Args...) const && noexcept> {}; 38 template<class Return, class... Args> struct foo<Return(Args...) volatile noexcept> {}; 39 template<class Return, class... Args> struct foo<Return(Args...) volatile & noexcept> {}; 40 template<class Return, class... Args> struct foo<Return(Args...) volatile && noexcept> {}; 41 template<class Return, class... Args> struct foo<Return(Args...) const volatile noexcept> {}; 42 template<class Return, class... Args> struct foo<Return(Args...) const volatile & noexcept> {}; 43 template<class Return, class... Args> struct foo<Return(Args...) const volatile && noexcept> {}; 44 template<class Return, class... Args> struct foo<Return(Args..., ...) noexcept> {}; 45 template<class Return, class... Args> struct foo<Return(Args..., ...) & noexcept> {}; 46 template<class Return, class... Args> struct foo<Return(Args..., ...) && noexcept> {}; 47 template<class Return, class... Args> struct foo<Return(Args..., ...) const noexcept> {}; 48 template<class Return, class... Args> struct foo<Return(Args..., ...) const & noexcept> {}; 49 template<class Return, class... Args> struct foo<Return(Args..., ...) const && noexcept> {}; 50 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile noexcept> {}; 51 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile & noexcept> {}; 52 template<class Return, class... Args> struct foo<Return(Args..., ...) volatile && noexcept> {}; 53 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile noexcept> {}; 54 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile & noexcept> {}; 55 template<class Return, class... Args> struct foo<Return(Args..., ...) const volatile && noexcept> {}; 56 57 //] 58