56daebbd49
[SVN r56316]
64 lines
1.9 KiB
C++
64 lines
1.9 KiB
C++
// (C) Copyright Jonathan Turkanis 2004.
|
|
// Use, modification and distribution are subject to the
|
|
// Boost Software License, Version 1.0. (See accompanying file
|
|
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
// See http://www.boost.org for most recent version including documentation.
|
|
|
|
// note: this is a compile only test.
|
|
|
|
#include <boost/config.hpp> // BOOST_STATIC_CONST
|
|
#include <boost/static_assert.hpp>
|
|
#include <boost/type_traits/is_polymorphic.hpp>
|
|
|
|
#include <boost/serialization/static_warning.hpp>
|
|
|
|
typedef char a1[2];
|
|
typedef char a2[3];
|
|
|
|
class polymorphic {
|
|
virtual ~polymorphic();
|
|
};
|
|
|
|
class non_polymorphic {
|
|
};
|
|
|
|
template<class T>
|
|
int f(){
|
|
BOOST_STATIC_WARNING(T::value);
|
|
return 0;
|
|
}
|
|
|
|
struct A {
|
|
BOOST_STATIC_CONSTANT(bool, value = false);
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////
|
|
// compilation of this program should show a total of 10 warning messages
|
|
|
|
// should show NO warning message
|
|
BOOST_STATIC_WARNING(true);
|
|
|
|
// the following should show 5 warning message
|
|
int x = f<A>(); // Warn
|
|
int y = f<boost::is_polymorphic<non_polymorphic> >(); // Warn.
|
|
int z = f<boost::is_polymorphic<polymorphic> >();
|
|
|
|
BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
|
|
BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
|
|
BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
|
|
BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
|
|
|
|
int main(int /* argc */, char * /* argv */[]){
|
|
// should show NO warning message
|
|
BOOST_STATIC_WARNING(true);
|
|
|
|
// the following should show 5 warning message
|
|
f<A>();
|
|
BOOST_STATIC_WARNING(sizeof(a1) == sizeof(a2)); // Warn.
|
|
BOOST_STATIC_WARNING(sizeof(a1) != sizeof(a1)); // Warn.
|
|
BOOST_STATIC_WARNING(! boost::is_polymorphic<polymorphic>::value); // Warn.
|
|
BOOST_STATIC_WARNING(boost::is_polymorphic<non_polymorphic>::value); // Warn.
|
|
return 0;
|
|
}
|