// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 #pragma once // An attempt to deduce the return / parameter types of member function calls namespace frantic { namespace max3d { namespace fpwrapper { struct no_deduced_type {}; // To deduce the function arity template struct DeduceFnArity { // No arity of general function }; // To deduce argument types template struct DeduceFnArguments { typedef no_deduced_type type; }; // 0 argument function template struct DeduceFnArity { enum { arity = 0 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; // 1 argument function template struct DeduceFnArity { enum { arity = 1 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; // 2 argument function template struct DeduceFnArity { enum { arity = 2 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; // 3 argument function template struct DeduceFnArity { enum { arity = 3 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; template struct DeduceFnArguments { typedef T2 type; }; // 4 argument function template struct DeduceFnArity { enum { arity = 4 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; template struct DeduceFnArguments { typedef T2 type; }; template struct DeduceFnArguments { typedef T3 type; }; // 5 argument function template struct DeduceFnArity { enum { arity = 5 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; template struct DeduceFnArguments { typedef T2 type; }; template struct DeduceFnArguments { typedef T3 type; }; template struct DeduceFnArguments { typedef T4 type; }; // 6 argument function template struct DeduceFnArity { enum { arity = 6 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; template struct DeduceFnArguments { typedef T2 type; }; template struct DeduceFnArguments { typedef T3 type; }; template struct DeduceFnArguments { typedef T4 type; }; template struct DeduceFnArguments { typedef T5 type; }; // 7 argument function template struct DeduceFnArity { enum { arity = 7 }; }; template struct DeduceFnArguments { typedef void type; }; template struct DeduceFnArguments { typedef RT type; }; template struct DeduceFnArguments { typedef T0 type; }; template struct DeduceFnArguments { typedef T1 type; }; template struct DeduceFnArguments { typedef T2 type; }; template struct DeduceFnArguments { typedef T3 type; }; template struct DeduceFnArguments { typedef T4 type; }; template struct DeduceFnArguments { typedef T5 type; }; template struct DeduceFnArguments { typedef T6 type; }; } // namespace fpwrapper } // namespace max3d } // namespace frantic