diff options
author | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2013-04-08 18:45:10 +0000 |
commit | c72c57c9e9b69944e3e009cd5e209634839581d3 (patch) | |
tree | 4fc2f184c499d106f29a386c452b49e5197bf63d /test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp | |
parent | 5b20025c30d23d521e12c1f33ec8fa6b821952cd (diff) | |
download | FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.zip FreeBSD-src-c72c57c9e9b69944e3e009cd5e209634839581d3.tar.gz |
Vendor import of clang trunk r178860:
http://llvm.org/svn/llvm-project/cfe/trunk@178860
Diffstat (limited to 'test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp')
-rw-r--r-- | test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp b/test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp index 36b0700..dcf5a08 100644 --- a/test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp +++ b/test/CXX/temp/temp.fct.spec/temp.arg.explicit/p3-0x.cpp @@ -26,3 +26,24 @@ namespace ParameterPacksWithFunctions { unsigned_c<2> uc2 = f<float, double>(); } } + +namespace rdar12176336 { + typedef void (*vararg_func)(...); + + struct method { + vararg_func implementation; + + method(vararg_func implementation) : implementation(implementation) {} + + template<typename TReturnType, typename... TArguments, typename TFunctionType = TReturnType (*)(TArguments...)> + auto getImplementation() const -> TFunctionType + { + return reinterpret_cast<TFunctionType>(implementation); + } + }; + + void f() { + method m(nullptr); + auto imp = m.getImplementation<int, int, int>(); + } +} |