Ok, first off, this is not explicitly about Boost, which I know is against the
Boost guidelines, but I hope you'll all forgive me. Indirectly it is through trying
to use Boost that i've bumped into this.
A little code snippet...
#include <cstddef>
template < typename T, std :: size_t sz >
struct Block
{
typedef T type[ sz ][ sz ];
};
template < typename T >
void assign( T & assignee, const T & value );
template < typename T, std :: size_t sz >
void assign( T ( & assignee )[ sz ], const T ( & value )[ sz ] );
int main( )
{
Block< int, 16 > :: type a;
const Block< int, 16 > :: type b = { };
assign( a, b );
}
This compiles under Gcc & Comeau, but MS VisStudio reckons the call
to assign in main is ambiguous. Any thoughts?
Also, if I put all the template declarations in an anonymous namespace, Comeau
fails to compile, while Gcc is still ok!
Have we encountered this before, and is there a known work around?
Thanks.
- Rob.