----- Original Message ----- 
From: "Vladimir Prus" <[EMAIL PROTECTED]>


> Greg Dehaas wrote:
> > Hi All,
> 
> > boost::any test = "Test Me"; 
> [...]
> > And the error message is:
> > c:\dev\boost\boost\any.hpp(105) : error C2536: 'boost::any::holder<char
> > [8]>::held' : cannot specify explicit initializer for arrays
> >         c:\dev\boost\boost\any.hpp(122) : see declaration of 'held'
> >         c:\dev\boost\boost\any.hpp(103) : while compiling class-template
> > member function '__thiscall boost::any::holder<char
> > [8]>::boost::any::holder<char [8]>(const char (&)[8])'
> 
> Hmm... the same problem can be seen if you try
> 
>     std::make_pair("1", "2");
> 
> the template parameters are deduces as char[1] and char[1], and there's no 
> much you can do with that type, not even copy it. That's the way template
> argument deduction works, IIRC. I suggest that you change ctors of any and
> any::holder to take value instead of reference, and tell what you got. Of 
> course, you should be able to say
> 
>    boost::any test = static_cast<const char*>("Test me");

Yes, but a library can make it work. For instance, make_tuple("hello, ", "world") 
works as expected. QOI matter?

// Arrays can't be stored as plain types; convert them to references.

template<class T, int n>  
struct make_tuple_traits <T[n]> {
  typedef const T (&type)[n];
};

Cheers,
Joel de Guzman
[EMAIL PROTECTED]
http://www.boost-consulting.com







_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to