Boost logo

Boost Users :

Subject: [Boost-users] Bug in VC++ using templates and or my error
From: Edward Diener (eldiener_at_[hidden])
Date: 2010-07-15 01:32:08


I realize this question may not belong here, but since the code in
question uses Boost, I will ask here first and hope I may be forgiven
for doing so.

The following code does not fail with a compile time message from
BOOST_MPL_ASSERT but it seems as if it should, with both VC9 and VC10:

----------------------------------------------------------------------

#include "stdafx.h"
#include <boost/config.hpp>
#include <boost/mpl/assert.hpp>

struct test_default { };

namespace test_template1
   {
   template
     <
     class T1,
     class P1_1,
     class P1_2
>
   char test(typename T1::template AMemberTemplate<P1_1,P1_2> *);

   template
     <
     class T1,
     class P1_1,
     class P1_2
>
   char (&test(...))[2];
   }

template
   <
   class T,
   class P1 = test_default,
   class P2 = test_default
>
struct test_template
{
   typedef test_template type;

   BOOST_STATIC_CONSTANT(bool,
value=sizeof(test_template1::test<T,P1,P2>(0))==1);
};

namespace test_template2
   {
   template
     <
     class T1,
     class P1_1
>
   char test(typename T1::template AMemberTemplate<P1_1> *);

   template
     <
     class T1,
     class P1_1
>
   char (&test(...))[2];
   }

template
   <
   class T,
   class P1
>
struct test_template
   <
   T,
   P1,
   test_default
>
{
   typedef test_template type;

   BOOST_STATIC_CONSTANT(bool,
value=sizeof(test_template2::test<T,P1>(0))==1);
};

struct TType
   {
   template <class X> struct AMemberTemplate { };
   };

void AFunction()
   {
   BOOST_MPL_ASSERT(( test_template<TType> ));
   }

------------------------------------------------------------------

It appears that the specialization of the 'test_template' template is
being chosen instead of the main template itself but I do not see why
this should be so. Is this my error or an actual bug in VC9 and VC10. If
it is a VC bug, does Boost currently have a way to workaround it ?


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net