diff options
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/pr33996.C')
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr33996.C | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/pr33996.C b/gcc/testsuite/g++.dg/cpp0x/pr33996.C new file mode 100644 index 000000000..07590f06f --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr33996.C @@ -0,0 +1,52 @@ +// { dg-options "-std=c++0x" } + +#define BUG +struct type +{ + type() { } + type(const type&) { } + +private: + type(type&&); +}; + +template<typename _Tp> + struct identity + { + typedef _Tp type; + }; + +template<typename _Tp> + inline _Tp&& + forward(typename identity<_Tp>::type&& __t) + { return __t; } + +struct vec +{ + template<typename _Args> + void + bar(_Args&& __args) +#ifdef BUG + ; +#else + { + type(forward<_Args>(__args)); + } +#endif +}; + +#ifdef BUG +template<typename _Args> + void + vec::bar(_Args&& __args) + { + type(forward<_Args>(__args)); + } +#endif + +int main() +{ + vec v; + type c; + v.bar(c); +} |