Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Xcode 2.2 /gcc 4.0.1 problem with ambigous overloaded template functions



Hi,
I am experiencing problems with Xcode 2.2 (gcc-4.0.1 build 5247) compiling code with overloaded template functions. gcc complains about ambiguous overloaded functions in the following code snippet. To recreate just create a new project of type "Command Line Utility/C+ + Tool", paste the snippet into main.cpp and build. The same code compiles fine with Xcode 2.1 (gcc 4.0.0), CodeWarrior, VC7, and Comeau (online compiler on http://www.comeaucomputing.com). I think the code is OK, if not I would be happy to learn more about this. Is this a bug in gcc 4.0.1? Did anyone see similar problems? What can I do to fix the problem?


//////////////////
// File main.cpp
#include <vector>
#include <string>

template< typename T1, typename T2 >
inline std::vector<T1> foo( const std::vector<T2>& t )
{
	std::vector<T1> t1;
	return t1;
}

template< typename T >
inline std::vector<T> foo(const std::vector<T>& t)
{
	return t;
}

std::vector<std::string> t()
{
	std::vector< std::string > t;
	return foo< std::string >( t );
}

int main (int argc, char * const argv[])
{
    t();
    return 0;
}
//////////////////
// EOF


By compiling this code snippet with Xcode 2.2 (gcc-4.0.1 build 5247) on Macintel I get the following error message:


[...]
In function 'std::vector<std::string, std::allocator<std::string> > t ()':
error: call of overloaded 'foo(std::vector<std::string, std::allocator<std::string> >&)' is ambiguous
note:
candidates are: std::vector<T1, std::allocator<_CharT> > foo(const std::vector<T2, std::allocator<_T2> >&) [with T1 = std::string, T2 = std::string]
note:
std::vector<T1, std::allocator<_CharT> > foo(const std::vector<T1, std::allocator<_CharT> >&) [with T = std::string]
[...]


The complete log:

Building target “main.cpp” of project “templatetest”

Checking Dependencies
CompileC /Users/admin/Documents/XCode21/intermediate/ templatetest.build/Debug/templatetest.build/Objects-normal/i386/ main.o /Users/admin/templatetest/main.cpp normal i386 c++ com.apple.compilers.gcc.4_0
cd /Users/admin/templatetest
/usr/bin/gcc-4.0 -x c++ -arch i386 -pipe -Wno-trigraphs -fpascal- strings -fasm-blocks -g -O0 -Wreturn-type -Wunused-variable -fmessage- length=0 -mfix-and-continue -Wno-invalid-offsetof -fvisibility- inlines-hidden -I/Users/admin/Documents/XCode21/intermediate/ templatetest.build/Debug/templatetest.build/templatetest.hmap -F/ Users/admin/Documents/XCode21/products/Debug -I/Users/admin/Documents/ XCode21/products/Debug/include -I/Users/admin/Documents/XCode21/ intermediate/templatetest.build/Debug/templatetest.build/ DerivedSources -isysroot /Developer/SDKs/MacOSX10.4u.sdk -c /Users/ admin/templatetest/main.cpp -o /Users/admin/Documents/XCode21/ intermediate/templatetest.build/Debug/templatetest.build/Objects- normal/i386/main.o
/Users/admin/templatetest/main.cpp: In function 'std::vector<std::string, std::allocator<std::string> > t()':
/Users/admin/templatetest/main.cpp:19: error: call of overloaded 'foo (std::vector<std::string, std::allocator<std::string> >&)' is ambiguous
/Users/admin/templatetest/main.cpp:5: note: candidates are: std::vector<T1, std::allocator<_CharT> > foo(const std::vector<T2, std::allocator<_T2> >&) [with T1 = std::string, T2 = std::string]
/Users/admin/templatetest/main.cpp:11: note: std::vector<T1, std::allocator<_CharT> > foo(const std::vector<T1, std::allocator<_CharT> >&) [with T = std::string]


Ulrich Frotscher


_______________________________________________ Do not post admin requests to the list. They will be ignored. Xcode-users mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/xcode-users/email@hidden

This email sent to email@hidden


Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.