Compare commits

...

56 Commits

Author SHA1 Message Date
Rene Rivera
afe9e9d786 Add, and update, documentation build targets. 2016-10-10 11:39:53 -05:00
jzmaddock
87f3be4a8f Merge pull request #3 from morinmorin/fix/unused_attribute
Use Boost.Config's BOOST_ATTRIBUTE_UNUSED
2015-09-10 19:21:39 +01:00
morinmorin
46e0bd762c Use Boost.Config's BOOST_ATTRIBUTE_UNUSED. 2015-09-11 02:08:43 +09:00
jzmaddock
8cd6ce7829 Merge branch 'develop' 2015-09-10 10:17:52 +01:00
jzmaddock
bb3cc11f09 Merge pull request #2 from mgaunard/clang_warning_fix
Avoid unused typedef warnings with clang
2014-10-02 18:28:18 +01:00
Mathias Gaunard
15c38db1d2 enable __attribute__((unused)) to avoid unused typedef warnings with all gcc-like variants starting with gcc 4.0. Avoids generating the warning with Clang among others. 2014-09-29 14:55:39 +02:00
jzmaddock
41f9c4b99c Merge pull request #1 from danieljames/metadata
Create metadata file.
2014-08-18 17:37:23 +01:00
Daniel James
d2f57474a7 Add metadata file. 2014-08-18 15:11:03 +01:00
Daniel James
29a7d491b8 Create merge base for git. 2014-04-06 14:27:40 +01:00
jzmaddock
4aab0b78c3 If we have a static_assert we should use it, even if there are no variadic macros. 2013-12-11 18:57:43 +00:00
Stephen Kelly
d215ee5c9c StaticAssert: Remove obsolete MSVC version check.
[SVN r86035]
2013-09-30 00:20:43 +00:00
John Maddock
f2b7643595 Merge static_assert fix from Trunk.
Fixes #8644.

[SVN r84858]
2013-06-21 12:27:49 +00:00
John Maddock
bc29f7ab62 Apply patch from 8644.
Fixes #8644.

[SVN r84713]
2013-06-09 12:02:07 +00:00
John Maddock
c951c0db9a Apply patch from #8644.
Refs #8644.

[SVN r84686]
2013-06-08 10:58:41 +00:00
John Maddock
8912d413ba Fix for compilers that have no variadic macros but do have static_assert (are there any??)
Fixes #8346.

[SVN r83806]
2013-04-08 08:45:06 +00:00
John Maddock
41521344af Merge patches from Trunk.
[SVN r83496]
2013-03-19 18:10:39 +00:00
John Maddock
bf3ee21630 More variadic macro support for msvc and Intel.
[SVN r83444]
2013-03-15 18:21:03 +00:00
John Maddock
c40a626f1c Suppress GCC warnings.
[SVN r83104]
2013-02-23 18:26:39 +00:00
John Maddock
2993231dad Use variadic macros in static assert to make use easier.
Add warning suppression for GCC.
Minor doc fix.
Fixes #5810.
Fixes #7242.
Fixes #7966.

[SVN r82886]
2013-02-14 18:31:33 +00:00
John Maddock
5233df9b9e Merge changes from Trunk.
[SVN r81828]
2012-12-10 17:28:53 +00:00
Marshall Clow
ce9e800db8 Removed missed usage of deprecated macros in Boost.StaticAssert
[SVN r81588]
2012-11-27 14:30:10 +00:00
John Maddock
5e7b62a1f4 Fix doc typo.
Fixes #6355.

[SVN r80059]
2012-08-16 08:14:53 +00:00
John Maddock
7d9fdaee13 Merge documentation and property change fixes from Trunk.
[SVN r71486]
2011-04-25 17:27:05 +00:00
Beman Dawes
06dedcd232 Merge trunk BOOST_ASSERT_MSG additions
[SVN r68912]
2011-02-15 14:54:16 +00:00
Beman Dawes
e910489e16 Add BOOST_STATIC_ASSERT_MSG
[SVN r68584]
2011-01-31 15:03:41 +00:00
John Maddock
6f1d2476fa Change PDF URL to SF download page.
[SVN r67530]
2011-01-01 12:32:32 +00:00
John Maddock
f57e592d1e Change PDF URL to SF download page.
[SVN r67529]
2011-01-01 12:28:35 +00:00
Daniel James
e27a27c9f3 Merge documentation fixes.
* Use `doc/src/*.css` instead of `doc/html/*.css`.
* Remove wiki and people directories.
* Some documentation fixes.
* Left out `minimal.css` changes and boostbook changes because of clashes.


[SVN r63347]
2010-06-26 12:30:09 +00:00
Daniel James
a0a2bd5703 Update various libraries' documentation build.
Mostly to use the images and css files under doc/src instead of
doc/html, usually be deleting the settings in order to use the defaults.
Also add 'boost.root' to some builds in order to fix links which rely on
it.

[SVN r63146]
2010-06-20 18:00:48 +00:00
Beman Dawes
80c6340833 Use BOOST_NO_STATIC_ASSERT
[SVN r59698]
2010-02-16 12:45:53 +00:00
John Maddock
12f96b5653 Merge warning fixes from Trunk.
[SVN r58217]
2009-12-07 13:23:38 +00:00
John Maddock
138c5bde91 Fix gcc warning.
[SVN r57495]
2009-11-08 18:59:24 +00:00
Troy D. Straszheim
5d9274a683 rm cmake from trunk. I'm not entirely sure this is necessary to satisfy the inspect script, but I'm not taking any chances, and it is easy to put back
[SVN r56942]
2009-10-17 02:07:38 +00:00
Troy D. Straszheim
23d7abde22 rm cmake from the release branch before it goes out broken. Policy dictates that you never commit to release, you commit to trunk and merge to release.
[SVN r56941]
2009-10-17 01:10:45 +00:00
Troy D. Straszheim
87ecd7d39f Copyrights on CMakeLists.txt to keep them from clogging up the inspect
reports.  This is essentially the same commit as r55095 on the release
branch.



[SVN r55159]
2009-07-26 00:49:56 +00:00
Troy D. Straszheim
9e4d6dfeff Add basic copyright/license to keep cmake out of the inspection report
[SVN r55095]
2009-07-22 21:51:01 +00:00
John Maddock
2637358ba9 Merge PDF build changes from Trunk.
[SVN r51417]
2009-02-23 18:39:32 +00:00
John Maddock
62461d8848 Add PDF generation options to fix external links to point to the web site.
Added a few more Boostbook based libs that were missed first time around.
Fixed PDF naming issues.

[SVN r51284]
2009-02-17 10:05:58 +00:00
John Maddock
a7e33291eb Fix up PDF generation options.
[SVN r50910]
2009-01-30 18:20:49 +00:00
Troy D. Straszheim
9e411076c6 merge of cmake build files from trunk per beman
[SVN r50756]
2009-01-24 18:57:20 +00:00
John Maddock
413e7eda07 Fix inclusion of incorrect header.
Fixes #2537.

[SVN r50371]
2008-12-23 12:03:43 +00:00
Michael A. Jackson
a9a9f0591b Updating dependency information for modularized libraries.
[SVN r49628]
2008-11-07 17:05:27 +00:00
Michael A. Jackson
effe841116 Continuing merge of CMake build system files into trunk with the encouragement of Doug Gregor
[SVN r49510]
2008-11-01 13:15:41 +00:00
Daniel James
3488b2bdf2 Merge some documentation updates and fixes from trunk.
Merged revisions 47364,47402-47403 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r47364 | danieljames | 2008-07-12 20:32:15 +0100 (Sat, 12 Jul 2008) | 1 line
  
  Fix a PDF link that I missed before. (in static assert)
........
  r47402 | danieljames | 2008-07-13 20:42:56 +0100 (Sun, 13 Jul 2008) | 2 lines
  
  Note that emplace is only available on a few compilers.
........
  r47403 | danieljames | 2008-07-13 21:07:45 +0100 (Sun, 13 Jul 2008) | 2 lines
  
  Update the implementation details.
........


[SVN r47405]
2008-07-13 21:08:33 +00:00
Daniel James
8cfe5d77c0 Fix a PDF link that I missed before.
[SVN r47364]
2008-07-12 19:32:15 +00:00
John Maddock
28e09a3cca Merge changes from Trunk.
[SVN r47306]
2008-07-11 10:49:31 +00:00
John Maddock
481c2efbac Merge minor change from Trunk.
[SVN r43358]
2008-02-21 16:51:41 +00:00
Beman Dawes
3b702727b9 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41370]
2007-11-25 18:38:02 +00:00
Beman Dawes
f298ed51a9 Full merge from trunk at revision 41356 of entire boost-root tree.
[SVN r41369]
2007-11-25 18:07:19 +00:00
Beman Dawes
851fd2622e Starting point for releases
[SVN r39706]
2007-10-05 14:25:06 +00:00
nobody
720fb456d5 This commit was manufactured by cvs2svn to create tag
'Version_1_34_1'.

[SVN r38286]
2007-07-24 19:28:14 +00:00
John Maddock
2fa11699bf Added links to PDF docs.
[SVN r37653]
2007-05-09 17:20:56 +00:00
Rene Rivera
69dbf6f12d Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
John Maddock
66dd3d2595 Added trivial docs change, based on user suggestion, and brought example code into synch.
[SVN r34874]
2006-08-11 18:14:13 +00:00
John Maddock
7a0a3fbf32 Added license info.
[SVN r34585]
2006-07-17 10:49:22 +00:00
nobody
c5de8ff789 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
7 changed files with 167 additions and 40 deletions

View File

@@ -5,16 +5,45 @@
using quickbook ;
path-constant boost-images : ../../../doc/src/images ;
xml static_assert : static_assert.qbk ;
boostbook standalone
:
static_assert
:
<xsl:param>boost.root=../../../..
<xsl:param>nav.layout=none
<xsl:param>navig.graphics=0
# PDF Options:
# TOC Generation: this is needed for FOP-0.9 and later:
<xsl:param>fop1.extensions=0
# Or enable this if you're using XEP:
<xsl:param>xep.extensions=1
# TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
<xsl:param>fop.extensions=0
# No indent on body text:
<xsl:param>body.start.indent=0pt
# Margin size:
<xsl:param>page.margin.inner=0.5in
# Margin size:
<xsl:param>page.margin.outer=0.5in
# Yes, we want graphics for admonishments:
<xsl:param>admon.graphics=1
# Set this one for PDF generation *only*:
# default pnd graphics are awful in PDF form,
# better use SVG's instead:
<format>pdf:<xsl:param>admon.graphics.extension=".svg"
<format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
;
install html : ../../../doc/html/boostbook.css ;
install ../ : ../../../boost.png ;
###############################################################################
alias boostdoc
: static_assert
:
:
: ;
explicit boostdoc ;
alias boostrelease ;
explicit boostrelease ;

View File

@@ -16,20 +16,33 @@
]
This manual is also available in
[@http:svn.boost.org/svn/boost/sandbox/pdf/static_assert/release/static_assert.pdf
[@http://sourceforge.net/projects/boost/files/boost-docs/
printer friendly PDF format].
[section:intro Overview and Tutorial]
The header `<boost/static_assert.hpp>` supplies a single macro `BOOST_STATIC_ASSERT(x)`,
which generates a compile time error message if the integral-constant-expression `x`
is not true. In other words it is the compile time equivalent of the assert macro;
The header `<boost/static_assert.hpp>` supplies two macros:
BOOST_STATIC_ASSERT(x)
BOOST_STATIC_ASSERT_MSG(x, msg)
Both generate a compile time error message if the integral-constant-expression `x`
is not true. In other words, they are the compile time equivalent of the assert macro;
this is sometimes known as a "compile-time-assertion", but will be called a
"static assertion" throughout these docs. Note that if the condition is `true`,
then the macro will generate neither code nor data - and the macro can also
then the macros will generate neither code nor data - and the macros can also
be used at either namespace, class or function scope. When used in a template,
the static assertion will be evaluated at the time the template is instantiated;
this is particularly useful for validating template parameters.
this is particularly useful for validating template parameters.
If the C++0x `static_assert` feature is available, both macros will use it.
For `BOOST_STATIC_ASSERT(x)`, the error message will be a stringized version of `x`.
For `BOOST_STATIC_ASSERT_MSG(x, msg)`, the error message will be the `msg` string.
If the C++0x `static_assert` feature is not available, `BOOST_STATIC_ASSERT_MSG(x, msg)`
will be treated as `BOOST_STATIC_ASSERT(x)`.
The material that follows assumes the C++0x `static_assert` feature is not available.
One of the aims of `BOOST_STATIC_ASSERT` is to generate readable error messages.
These immediately tell the user that a library is being used in a manner that
@@ -131,17 +144,17 @@ Suppose we have a template-class that requires an unsigned integral type with
at least 16-bits of precision as a template argument, we can achieve this
using something like this:
#include <climits>
#include <limits>
#include <boost/static_assert.hpp>
template <class UnsignedInt>
class myclass
{
private:
BOOST_STATIC_ASSERT((std::numeric_limits<UnsignedInt>::digits >= 16)
&& std::numeric_limits<UnsignedInt>::is_specialized
&& std::numeric_limits<UnsignedInt>::is_integer
&& !std::numeric_limits<UnsignedInt>::is_signed);
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<UnsignedInt>::is_specialized, "myclass can only be specialized for types with numeric_limits support.");
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<UnsignedInt>::digits >= 16, "Template argument UnsignedInt must have at least 16 bits precision.")
BOOST_STATIC_ASSERT_MSG(std::numeric_limits<UnsignedInt>::is_integer, "Template argument UnsignedInt must be an integer.");
BOOST_STATIC_ASSERT_MSG(!std::numeric_limits<UnsignedInt>::is_signed, "Template argument UnsignedInt must not be signed.");
public:
/* details here */
};

View File

@@ -17,6 +17,25 @@
#include <boost/config.hpp>
#include <boost/detail/workaround.hpp>
#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
//
// This is horrible, but it seems to be the only we can shut up the
// "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
// warning that get spewed out otherwise in non-C++11 mode.
//
#pragma GCC system_header
#endif
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT_MSG( ... ) static_assert(__VA_ARGS__)
# else
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert( B, Msg )
# endif
#else
# define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
#endif
#ifdef __BORLANDC__
//
// workaround for buggy integral-constant expression support:
@@ -33,13 +52,25 @@
// then enable this:
//
#if defined(__GNUC__) && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 4)))
# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) ((__VA_ARGS__) == 0 ? false : true)
# else
# define BOOST_STATIC_ASSERT_BOOL_CAST( x ) ((x) == 0 ? false : true)
# endif
#else
# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT_BOOL_CAST( ... ) (bool)(__VA_ARGS__)
# else
# define BOOST_STATIC_ASSERT_BOOL_CAST(x) (bool)(x)
# endif
#endif
#ifdef BOOST_HAS_STATIC_ASSERT
# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT( ... ) static_assert(__VA_ARGS__, #__VA_ARGS__)
# else
# define BOOST_STATIC_ASSERT( B ) static_assert(B, #B)
# endif
#else
namespace boost{
@@ -78,24 +109,28 @@ template<int x> struct static_assert_test{};
//
#if !defined(BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS)
#if defined(BOOST_MSVC) && (BOOST_MSVC < 1300)
// __LINE__ macro broken when -ZI is used see Q199057
// fortunately MSVC ignores duplicate typedef's.
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >)\
> boost_static_assert_typedef_
#elif defined(BOOST_MSVC)
#if defined(BOOST_MSVC) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST ( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
#elif defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)
#elif defined(BOOST_MSVC)
#define BOOST_STATIC_ASSERT(...) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST (__VA_ARGS__) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __COUNTER__)
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && defined(BOOST_NO_CXX11_VARIADIC_MACROS)
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
// instead of warning in case of failure
# define BOOST_STATIC_ASSERT( B ) \
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >::value ]
#elif (defined(BOOST_INTEL_CXX_VERSION) || defined(BOOST_SA_GCC_WORKAROUND)) && !defined(BOOST_NO_CXX11_VARIADIC_MACROS)
// agurt 15/sep/02: a special care is needed to force Intel C++ issue an error
// instead of warning in case of failure
# define BOOST_STATIC_ASSERT(...) \
typedef char BOOST_JOIN(boost_static_assert_typedef_, __LINE__) \
[ ::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >::value ]
#elif defined(__sgi)
// special version for SGI MIPSpro compiler
#define BOOST_STATIC_ASSERT( B ) \
@@ -113,19 +148,32 @@ template<int x> struct static_assert_test{};
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >) )
#else
// generic version
#define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__)
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT( ... ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( __VA_ARGS__ ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
# else
# define BOOST_STATIC_ASSERT( B ) \
typedef ::boost::static_assert_test<\
sizeof(::boost::STATIC_ASSERTION_FAILURE< BOOST_STATIC_ASSERT_BOOL_CAST( B ) >)>\
BOOST_JOIN(boost_static_assert_typedef_, __LINE__) BOOST_ATTRIBUTE_UNUSED
# endif
#endif
#else
// alternative enum based implementation:
#define BOOST_STATIC_ASSERT( B ) \
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
# ifndef BOOST_NO_CXX11_VARIADIC_MACROS
# define BOOST_STATIC_ASSERT( ... ) \
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( __VA_ARGS__ ) >) }
# else
# define BOOST_STATIC_ASSERT(B) \
enum { BOOST_JOIN(boost_static_assert_enum_, __LINE__) \
= sizeof(::boost::STATIC_ASSERTION_FAILURE< (bool)( B ) >) }
# endif
#endif
#endif // ndef BOOST_HAS_STATIC_ASSERT
#endif // defined(BOOST_NO_CXX11_STATIC_ASSERT)
#endif // BOOST_STATIC_ASSERT_HPP

16
meta/libraries.json Normal file
View File

@@ -0,0 +1,16 @@
{
"key": "static_assert",
"name": "Static Assert",
"authors": [
"John Maddock"
],
"description": "Static assertions (compile time assertions).",
"category": [
"Correctness",
"Generic",
"Metaprogramming"
],
"maintainers": [
"John Maddock <john -at- johnmaddock.co.uk>"
]
}

View File

@@ -12,7 +12,7 @@
#include <boost/type_traits.hpp>
template <class RandomAccessIterator >
RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator to)
RandomAccessIterator foo(RandomAccessIterator from, RandomAccessIterator /*to*/)
{
// this template can only be used with
// random access iterators...

View File

@@ -5,7 +5,7 @@
// See http://www.boost.org for most recent version including documentation.
#include <climits>
#include <limits>
#include <boost/limits.hpp>
#include <boost/static_assert.hpp>

View File

@@ -16,12 +16,16 @@
// Namespace scope
BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short));
BOOST_STATIC_ASSERT(sizeof(char) == 1);
BOOST_STATIC_ASSERT_MSG(sizeof(int) >= sizeof(short), "msg1");
BOOST_STATIC_ASSERT_MSG(sizeof(char) == 1, "msg2");
// Function (block) scope
void f()
{
BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short));
BOOST_STATIC_ASSERT(sizeof(char) == 1);
BOOST_STATIC_ASSERT_MSG(sizeof(int) >= sizeof(short), "msg3");
BOOST_STATIC_ASSERT_MSG(sizeof(char) == 1, "msg4");
}
struct Bob
@@ -29,6 +33,8 @@ struct Bob
private: // can be in private, to avoid namespace pollution
BOOST_STATIC_ASSERT(sizeof(int) >= sizeof(short));
BOOST_STATIC_ASSERT(sizeof(char) == 1);
BOOST_STATIC_ASSERT_MSG(sizeof(int) >= sizeof(short), "msg5");
BOOST_STATIC_ASSERT_MSG(sizeof(char) == 1, "msg6");
public:
// Member function scope: provides access to member variables
@@ -36,9 +42,11 @@ struct Bob
char c;
int f()
{
#ifndef _MSC_VER // broken sizeof in VC6
#if defined(_MSC_VER) && _MSC_VER < 1300 // broken sizeof in VC6
BOOST_STATIC_ASSERT(sizeof(x) >= sizeof(short));
BOOST_STATIC_ASSERT(sizeof(c) == 1);
BOOST_STATIC_ASSERT_MSG(sizeof(x) >= sizeof(short), "msg7");
BOOST_STATIC_ASSERT_MSG(sizeof(c) == 1, "msg8");
#endif
return x;
}
@@ -50,8 +58,10 @@ struct Bob
template <class Int, class Char>
struct Bill
{
BOOST_STATIC_CONSTANT(int, value = 1);
private: // can be in private, to avoid namespace pollution
BOOST_STATIC_ASSERT(sizeof(Int) > sizeof(char));
BOOST_STATIC_ASSERT_MSG(sizeof(Int) > sizeof(char), "msg9");
public:
// Template member function scope: provides access to member variables
@@ -62,10 +72,12 @@ struct Bill
{
BOOST_STATIC_ASSERT(sizeof(Int) == sizeof(Int2));
BOOST_STATIC_ASSERT(sizeof(Char) == sizeof(Char2));
BOOST_STATIC_ASSERT_MSG(sizeof(Int) == sizeof(Int2), "msg10");
BOOST_STATIC_ASSERT_MSG(sizeof(Char) == sizeof(Char2), "msg11");
}
};
void test_Bill() // BOOST_CT_ASSERTs are not triggerred until instantiated
void test_Bill() // BOOST_STATIC_ASSERTs are not triggerred until instantiated
{
Bill<int, char> z;
//Bill<int, int> bad; // will not compile
@@ -78,6 +90,15 @@ void test_Bill() // BOOST_CT_ASSERTs are not triggerred until instantiated
int main()
{
test_Bill();
//
// Test variadic macro support:
//
#ifndef BOOST_NO_CXX11_VARIADIC_MACROS
BOOST_STATIC_ASSERT(Bill<int, char>::value);
#ifndef BOOST_NO_CXX11_STATIC_ASSERT
BOOST_STATIC_ASSERT_MSG(Bill<int, char>::value, "This is a message");
#endif
#endif
return 0;
}