Boost logo

Boost :

From: Bronek Kozicki (brok_at_[hidden])
Date: 2004-03-08 15:15:27

On Mon, 08 Mar 2004 10:47:49 +0100, Daniel Frey wrote:
> but that's just a wild guess. I just seem to remember that I read about
> the VC having a small problem there. If this is in fact the problem, we
> might be lucky as my newest version no longer uses this conversion,
> instead I use a get<T>-function.

I can reproduce this ICE on following code:

template<template <typename> class F> struct constant
  template <typename T> operator T() const
    return F <T>()();

template <typename T> struct map_type;

template <template<typename> class F, typename T> struct constant_value
  T operator()() const
    return F<typename ::map_type<T> ::type>()();

template <typename T> struct pi_value : constant_value< ::pi_value, T >
template <> struct pi_value <float> {float operator()() const {return

struct pi_t : constant <pi_value> {} const pi = pi_t();

int main()
  const float f2 = pi; // ICE here

possibly it can be made smaller, I just finished cutting it at this
moment and sent to private MS newsgroup asking for support. Comeau and
GCC both happily accept this code, and it just looks OK. However it's
bit too complicated and I'm too tired to look into it deeper. I hope
someone from VC71 developers will now take a look. VC71 quite often
bulks on invalid code, but if this one is valid (I certainly think so)
then we have issue that have to be fixed . In the meantime if you can
come up with some variations of the above, just send an email and I will
test it. BTW: problem with operator() and VC71 is that it does not
always recognize operator() as function, in context of pointer to member
function. However it does not ICE on that problem.



Boost list run by bdawes at, gregod at, cpdaniel at, john at