Boost logo

Boost :

Subject: [boost] [non Boost] Template troubles.
From: Robert Jones (robertgbjones_at_[hidden])
Date: 2008-12-10 04:29:37


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.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk