[bind] Error C4430 in bind.hpp

For some reason when I include <boost/bind.hpp> I get the following errors: 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1201) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1203) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1204) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1206) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1209) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1210) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int They point to this code in bind.hpp: BOOST_BIND_OPERATOR( ==, equal ) BOOST_BIND_OPERATOR( !=, not_equal ) BOOST_BIND_OPERATOR( <, less ) BOOST_BIND_OPERATOR( <=, less_equal ) BOOST_BIND_OPERATOR( >, greater ) BOOST_BIND_OPERATOR( >=, greater_equal ) BOOST_BIND_OPERATOR( &&, logical_and ) BOOST_BIND_OPERATOR( ||, logical_or ) Any idea why this is failing? If more info is needed please let me know. --------- Robert Dailey

I also forgot to mention I'm using Boost 1.48 --------- Robert Dailey On Wed, Mar 14, 2012 at 5:07 PM, Robert Dailey <rcdailey@gmail.com> wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1201) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1203) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1204) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1206) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1209) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1210) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal ) BOOST_BIND_OPERATOR( !=, not_equal )
BOOST_BIND_OPERATOR( <, less ) BOOST_BIND_OPERATOR( <=, less_equal )
BOOST_BIND_OPERATOR( >, greater ) BOOST_BIND_OPERATOR( >=, greater_equal )
BOOST_BIND_OPERATOR( &&, logical_and ) BOOST_BIND_OPERATOR( ||, logical_or )
Any idea why this is failing? If more info is needed please let me know.
--------- Robert Dailey

Anyone? Could this maybe be due to a conflict in another third party library I'm using? On Mar 14, 2012 5:07 PM, "Robert Dailey" <rcdailey@gmail.com> wrote:
I also forgot to mention I'm using Boost 1.48
--------- Robert Dailey
On Wed, Mar 14, 2012 at 5:07 PM, Robert Dailey <rcdailey@gmail.com> wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1201) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1203) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1204) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1206) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1207) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1209) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1210) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal ) BOOST_BIND_OPERATOR( !=, not_equal )
BOOST_BIND_OPERATOR( <, less ) BOOST_BIND_OPERATOR( <=, less_equal )
BOOST_BIND_OPERATOR( >, greater ) BOOST_BIND_OPERATOR( >=, greater_equal )
BOOST_BIND_OPERATOR( &&, logical_and ) BOOST_BIND_OPERATOR( ||, logical_or )
Any idea why this is failing? If more info is needed please let me know.
--------- Robert Dailey

It depend on how you are using it. Can you show code, that requires bind.hpp to be included ? Probably, you are using one of class without its header declaration. -- View this message in context: http://boost.2283326.n4.nabble.com/bind-Error-C4430-in-bind-hpp-tp4473282p44... Sent from the Boost - Dev mailing list archive at Nabble.com.

Please don't top-post. Respond in-line or at the bottom. On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1201) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[snip]
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal ) BOOST_BIND_OPERATOR( !=, not_equal )
[snip]
Any idea why this is failing? If more info is needed please let me know.
Try preprocessing your source and see what these macros expand to on your configuration, preferably doing the same on a known good machine. -- Lars Viklund | zao@acc.umu.se

On Thu, Mar 15, 2012 at 9:25 AM, Lars Viklund <zao@acc.umu.se> wrote:
Please don't top-post. Respond in-line or at the bottom.
On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200)
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1201)
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[snip]
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal ) BOOST_BIND_OPERATOR( !=, not_equal )
[snip]
Any idea why this is failing? If more info is needed please let me know.
Try preprocessing your source and see what these macros expand to on your configuration, preferably doing the same on a known good machine.
Thanks for the help. I generated a preprocessed file for this translation unit (the one including bind.hpp) and I see the following generated code: struct equal { template<class V, class > bool operator()(V const & v, const & w) const { return v == w; } }; template<class R, class F, class L, class A2> bind_t< bool, equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator == (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, equal, list_type> ( equal(), list_type(f, a2) ); } struct not_equal { template<class V, class > bool operator()(V const & v, const & w) const { return v != w; } }; template<class R, class F, class L, class A2> bind_t< bool, not_equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator != (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, not_equal, list_type> ( not_equal(), list_type(f, a2) ); } struct less { template<class V, class > bool operator()(V const & v, const & w) const { return v < w; } }; template<class R, class F, class L, class A2> bind_t< bool, less, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator < (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, less, list_type> ( less(), list_type(f, a2) ); } struct less_equal { template<class V, class > bool operator()(V const & v, const & w) const { return v <= w; } }; template<class R, class F, class L, class A2> bind_t< bool, less_equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator <= (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, less_equal, list_type> ( less_equal(), list_type(f, a2) ); } struct greater { template<class V, class > bool operator()(V const & v, const & w) const { return v > w; } }; template<class R, class F, class L, class A2> bind_t< bool, greater, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator > (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, greater, list_type> ( greater(), list_type(f, a2) ); } struct greater_equal { template<class V, class > bool operator()(V const & v, const & w) const { return v >= w; } }; template<class R, class F, class L, class A2> bind_t< bool, greater_equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator >= (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, greater_equal, list_type> ( greater_equal(), list_type(f, a2) ); } struct logical_and { template<class V, class > bool operator()(V const & v, const & w) const { return v && w; } }; template<class R, class F, class L, class A2> bind_t< bool, logical_and, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator && (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, logical_and, list_type> ( logical_and(), list_type(f, a2) ); } struct logical_or { template<class V, class > bool operator()(V const & v, const & w) const { return v || w; } }; template<class R, class F, class L, class A2> bind_t< bool, logical_or, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator || (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, logical_or, list_type> ( logical_or(), list_type(f, a2) ); } It's a nightmare to look at so I hope you can find the problem. I never was very good at debugging boost issues. I'm pretty sure it's one of the header files being included before it, but I have no idea what the conflict is.

On 15 March 2012 11:59, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 9:25 AM, Lars Viklund <zao@acc.umu.se> wrote:
On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200)
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[snip]
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal )
[snip]
Thanks for the help. I generated a preprocessed file for this translation unit (the one including bind.hpp) and I see the following generated code:
struct equal { template<class V, class > bool operator()(V const & v, const & w) const { return v == w; } }; template<class R, class F, class L, class A2> bind_t< bool, equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator == (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, equal, list_type> ( equal(), list_type(f, a2) ); }
Seems like the upper-case 'W' character is not being expanded properly. I'm assuming you don't have anything crazy in your code base that defines 'W' to be nothing? Cheers, Darren

On Thu, Mar 15, 2012 at 11:06 AM, Darren Garvey <darren.garvey@gmail.com>wrote:
On 15 March 2012 11:59, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 9:25 AM, Lars Viklund <zao@acc.umu.se> wrote:
On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
For some reason when I include <boost/bind.hpp> I get the following errors:
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200)
: error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
[snip]
They point to this code in bind.hpp:
BOOST_BIND_OPERATOR( ==, equal )
[snip]
Thanks for the help. I generated a preprocessed file for this translation unit (the one including bind.hpp) and I see the following generated code:
struct equal { template<class V, class > bool operator()(V const & v, const & w) const { return v == w; } }; template<class R, class F, class L, class A2> bind_t< bool, equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator == (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, equal, list_type> ( equal(), list_type(f, a2) ); }
Seems like the upper-case 'W' character is not being expanded properly. I'm assuming you don't have anything crazy in your code base that defines 'W' to be nothing?
Oh man, good find. We are using the IBM Lotus Notes API and it defines W to signify that we are on Windows. Kinda silly... I guess I'll #undef it for now. Really annoying though. Maybe in a future update to boost the template parameters could be given more unique names? Not that this is really boost's problem :) Thanks for the help!

On 15 March 2012 12:22, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 11:06 AM, Darren Garvey <darren.garvey@gmail.com
wrote:
On 15 March 2012 11:59, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 9:25 AM, Lars Viklund <zao@acc.umu.se> wrote:
On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
> For some reason when I include <boost/bind.hpp> I get the following > errors: > >
> : error C4430: missing type specifier - int assumed. Note: C++ does not > support default-int
[snip]
> > They point to this code in bind.hpp: > > BOOST_BIND_OPERATOR( ==, equal )
[snip]
Thanks for the help. I generated a preprocessed file for this
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200) translation
unit (the one including bind.hpp) and I see the following generated code:
struct equal { template<class V, class > bool operator()(V const & v, const & w) const { return v == w; } }; template<class R, class F, class L, class A2> bind_t< bool, equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator == (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, equal, list_type> ( equal(), list_type(f, a2) ); }
Seems like the upper-case 'W' character is not being expanded properly. I'm assuming you don't have anything crazy in your code base that defines 'W' to be nothing?
Oh man, good find. We are using the IBM Lotus Notes API and it defines W to signify that we are on Windows. Kinda silly... I guess I'll #undef it for now. Really annoying though. Maybe in a future update to boost the template parameters could be given more unique names? Not that this is really boost's problem :)
Better still, the standard could say that single characters shall not be macro defines. Common sense does already! Ah, the good old Notes API (or in fact anything Lotus Notes) - what a disaster. I once wrote a thin Boost.Python wrapper over most of the Notes C++ API; I laid it to rest on sourceforge ( http://sourceforge.net/projects/notespy/) if you'd prefer to have a less painful interface to use. :) Cheers, Darren

On Thu, Mar 15, 2012 at 3:16 PM, Darren Garvey <darren.garvey@gmail.com>wrote:
On 15 March 2012 12:22, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 11:06 AM, Darren Garvey <darren.garvey@gmail.com
wrote:
On 15 March 2012 11:59, Robert Dailey <rcdailey@gmail.com> wrote:
On Thu, Mar 15, 2012 at 9:25 AM, Lars Viklund <zao@acc.umu.se> wrote:
On Thu, Mar 15, 2012 at 08:25:54AM -0500, Robert Dailey wrote:
>> For some reason when I include <boost/bind.hpp> I get the following >> errors: >> >>
1>c:\code\work\cmake-mds\build-vc9\third_party\boost\1.48.0\include\boost\bind\bind.hpp(1200)
>> : error C4430: missing type specifier - int assumed. Note: C++ does not >> support default-int
[snip]
>> >> They point to this code in bind.hpp: >> >> BOOST_BIND_OPERATOR( ==, equal )
[snip]
Thanks for the help. I generated a preprocessed file for this translation unit (the one including bind.hpp) and I see the following generated code:
struct equal { template<class V, class > bool operator()(V const & v, const & w) const { return v == w; } }; template<class R, class F, class L, class A2> bind_t< bool, equal, list2< bind_t<R, F, L>, typename add_value<A2>::type > > operator == (bind_t<R, F, L> const & f, A2 a2) { typedef typename add_value<A2>::type B2; typedef list2< bind_t<R, F, L>, B2> list_type; return bind_t<bool, equal, list_type> ( equal(), list_type(f, a2) ); }
Seems like the upper-case 'W' character is not being expanded properly. I'm assuming you don't have anything crazy in your code base that defines 'W' to be nothing?
Oh man, good find. We are using the IBM Lotus Notes API and it defines W to signify that we are on Windows. Kinda silly... I guess I'll #undef it for now. Really annoying though. Maybe in a future update to boost the template parameters could be given more unique names? Not that this is really boost's problem :)
Better still, the standard could say that single characters shall not be macro defines. Common sense does already!
Ah, the good old Notes API (or in fact anything Lotus Notes) - what a disaster. I once wrote a thin Boost.Python wrapper over most of the Notes C++ API; I laid it to rest on sourceforge ( http://sourceforge.net/projects/notespy/) if you'd prefer to have a less painful interface to use. :)
+1 to your Python wrapper, that seems extremely useful. However, I have bad news for you: They've deprecated the C++ Notes API and now only update the C API. What a way to take a step backwards, eh?
participants (4)
-
Darren Garvey
-
Lars Viklund
-
prasad
-
Robert Dailey