http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51083
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> 2011-11-10 19:01:10 UTC --- reduced #include <complex> namespace a { template<typename> class Mat { }; typedef std::complex<double> cx_double; typedef Mat<cx_double> cx_mat; template<typename T> struct Mat2 { Mat2(Mat<T>) { } }; struct Res { }; template<typename T> Res imag(Mat2<T>) { return Res(); } } using namespace a; using namespace std; int main() { cx_mat c; Res res = imag(c); } imag.cc: In function ‘int main()’: imag.cc:34:19: error: conversion from ‘__gnu_cxx::__promote<a::Mat<std::complex<double> >, false>::__type {aka a::Mat<std::complex<double> >}’ to non-scalar type ‘a::Res’ requested