This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Possible 4.4.0 regression (can't match template ctor of template class where...)
- From: Simon Hill <yacwroy at gmail dot com>
- To: gcc <gcc at gcc dot gnu dot org>
- Date: Thu, 5 Mar 2009 09:12:55 +1300
- Subject: Possible 4.4.0 regression (can't match template ctor of template class where...)
g++ doesn't seem able to match a template ctor of a template class
where the ctor input is an internal class defined inside any template
class.
I briefly skimmed the titles of the current regression issues and I
didn't notice any that matched this, but I'm not 100% sure.
I first posted this here thinking it was my code that was somehow wrong.
http://www.gamedev.net/community/forums/topic.asp?topic_id=526736
demo.cpp
========================
template <typename T>
class CFoo
{
public:
class CZep {};
CFoo(int); // line 7.
template <typename Z> CFoo(typename CFoo<Z>::CZep); // ## ctor I want ##
~CFoo();
CZep zep();
};
int main()
{
CFoo<int> x(1);
CFoo<int>::CZep z;
CFoo<int> w(z); // line 19: ## should call the ctor on line 8 ##
return 0;
}
========================
g++ demo.cpp
========================
demo.cpp: In function ‘int main()’:
demo.cpp:19: error: no matching function for call to
‘CFoo<int>::CFoo(CFoo<int>::CZep&)’
demo.cpp:7: note: candidates are: CFoo<T>::CFoo(int) [with T = int]
demo.cpp:3: note: CFoo<int>::CFoo(const CFoo<int>&)
========================
Specs:
g++ [4.4.0]
ubuntu [ibex, 64]
This compiles fine on 3.3.2 and MSVC according to other testers at gamedev.net.
Note: In the above example CZep is inside CFoo, but it doesn't matter
if you put CZep inside class CBar<T> {} instead, just as long as it's
inside another template class.
Does the above code compile OK on other people's 4.4.0s? or is it a bug?