|
Boost : |
From: Jaakko Jarvi (jajarvi_at_[hidden])
Date: 2003-10-24 14:12:43
This is a bug. Type struct_a ends up in a tuple type, and even though
a tuple object is never instantiated, the type is. In this type,
struct_a is used as a member variable type, which is not allowed.
For a quick fix, I'd need is_abstract_base type traits,
(there seemst to be one proposed by rani sharoni) but it's not part of
type_traits right.
But there is a better but less quick fix too, hopefully will get fixed
with the new TR tuples and fusion.
Jaakko
In our last exciting episode "Brock Peabody" wrote:
> Importance: Normal
> I'm sure I'm missing something simple again, but if I try to compile:
> #include <boost/lambda/bind.hpp>
> struct a_struct {
> virtual void f() = 0;
> };
> void f(a_struct&);
> int
> main() {
> a_struct* a;
> boost::lambda::bind(&f, boost::ref(*a));
> return 0;
> }
> With MSVC 7.1 I get an error message like: "c:\Program Files\Microsoft
> Visual Studio .NET 2003\Vc7\include\boost\tuple\detail\tuple_basic.hpp(354)
> : error C2259: 'a_struct' : cannot instantiate abstract class
> due to following members:
> 'void a_struct::f(void)' : pure virtual function was not defined..."
> If I change it to use plain boost::bind instead of boost::lambda::bind it
> works. Lambda::var doesn't do the trick either. Interestingly, if I change
> the definition of a_struct to:
> struct a_struct : boost::noncopyable {
> private:
> a_struct();
> };
> It works with lambda::bind. As far as I can tell you shouldn't be able to
> do anything with this version that you couldn't with the abstract base class
> version.
> Any ideas?
> Thanks!
> Brock
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Sincerely,
Jaakko Järvi
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk