https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81239
--- Comment #5 from Jonny Grant <jg at jguk dot org> --- (In reply to Jonathan Wakely from comment #4) > I fixed the std::__cxx11::string case on trunk, the output is now: Great! I wonder how this looks now with -std=c++14 or -std=c++17 (not sure why I still saw __cxx11 with both of these with my g++ 8.2.0 [..] > The error: line shows the namespace for one parameter and not the other: > > 81239.cc: In function 'int main()': > 81239.cc:16:15: error: too few arguments to function 'void test_params(const > cfoo&, a::b::cfoo&)' > 16 | test_params(); > | ^ > 81239.cc:10:6: note: declared here > 10 | void test_params(const cfoo&, cfoo&) > | ^~~~~~~~~~~ I imagine you may have found out that this goes away if the "const" is removed. So it becomes void test_params(string & mystr1, string & out_str)