
Vladimir Prus wrote:
Luke Elliott wrote:
I was wondering why boost libraries don't do something like:
class positional_options_description { public: BOOST_PROGRAM_OPTIONS_DECL positional_options_description(); BOOST_PROGRAM_OPTIONS_DECL void add(const char* name, int max_count); ... };
instead of:
class BOOST_PROGRAM_OPTIONS_DECL positional_options_description { public: max_count); ... };
in order to remove the irritating C4275 warning? i.e. only declspec public, protected members (and any private members invoked from inline methods).
Well, I did what I considered to be the standard thing. I have no idea what's C4275 warning is, and why adding declspecs to each method is a good idea. Can you explain?
(BTW - I just used program_options as an example as that's what I was looking at at the time...) I don't have access to VC++ right now so this is from memory, but there are (at least) 2 cases where it raises a warning: class MY_LIB_DECL my_class : public some_base { my_class(); }; if some_base isn't a declspeced class then you get "warning non dll-interface class used as based for dll-interface class". class MY_LIB_DECL my_class { my_class(); std::string m_string; }; Which gives "m_string must have dll-interface to be used by clients of my_class". Both warnings a pretty harmless hence the usual recommendation to disable the warning, I guess. However, the warnings can be removed by exporting only members which truly need to be exported - I was just curious as to why it isn't done in boost (possibly GCC issues?). Thanks Luke.