diff options
| -rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/template/pr54987.C | 51 |
2 files changed, 56 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b6dfe3b..7dedff4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-03-25 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/54987 + * g++.dg/template/pr54987.C: New. + 2015-03-25 Richard Biener <rguenther@suse.de> PR tree-optimization/62630 diff --git a/gcc/testsuite/g++.dg/template/pr54987.C b/gcc/testsuite/g++.dg/template/pr54987.C new file mode 100644 index 0000000..773f023 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr54987.C @@ -0,0 +1,51 @@ +// PR c++/54987 + +struct Argument1 +{ +}; + +struct Argument2 +{ +}; + +template<typename T> +struct Template1 +{ + Template1() {} + + template<typename Y> + Template1( const Template1<Y>& ) {} +}; + +template<typename T> +struct Template2 +{ + Template2() {} + + template<typename Y> + Template2( const Template1<Y>& ) {} +}; + +template <typename T> +struct make_type +{ + typedef Argument1 type; +}; + +template<typename T> +void foo( T, Template1<typename make_type<T>::type> ) +{ +} + +template<typename T> +void foo( T, Template2<typename make_type<T>::type> ) +{ +} + +int main() +{ + Template1<Argument2> t; + Argument1 a; + foo( a, t ); // { dg-error "ambiguous" } + return 0; +} |
