1<?xml version="1.0" encoding="utf-8" ?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 4<head> 5<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6<meta name="generator" content="Docutils 0.7: http://docutils.sourceforge.net/" /> 7<title>The MPL Reference Manual: BOOST_MPL_ASSERT_MSG</title> 8<link rel="stylesheet" href="../style.css" type="text/css" /> 9</head> 10<body class="docframe refmanual"> 11<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./assert.html" class="navigation-link">Prev</a> <a href="./assert-not.html" class="navigation-link">Next</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./assert.html" class="navigation-link">Back</a> <a href="./assert-not.html" class="navigation-link">Along</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./asserts.html" class="navigation-link">Up</a> <a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td> 12<td class="header-group page-location"><a href="../refmanual.html" class="navigation-link">Front Page</a> / <a href="./macros.html" class="navigation-link">Macros</a> / <a href="./asserts.html" class="navigation-link">Asserts</a> / <a href="./assert-msg.html" class="navigation-link">BOOST_MPL_ASSERT_MSG</a></td> 13</tr></table><div class="header-separator"></div> 14<div class="section" id="boost-mpl-assert-msg"> 15<h1><a class="toc-backref" href="./asserts.html#id1589">BOOST_MPL_ASSERT_MSG</a></h1> 16<div class="section" id="id1294"> 17<h3><a class="subsection-title" href="#synopsis" name="synopsis">Synopsis</a></h3> 18<pre class="literal-block"> 19#define <a href="./assert-msg.html" class="identifier">BOOST_MPL_ASSERT_MSG</a>( condition, message, types ) \ 20 <em>unspecified token sequence</em> \ 21/**/ 22</pre> 23</div> 24<div class="section" id="id1295"> 25<h3><a class="subsection-title" href="#description" name="description">Description</a></h3> 26<p>Generates a compilation error with an embedded custom message when the condition 27doesn't hold.</p> 28</div> 29<div class="section" id="id1296"> 30<h3><a class="subsection-title" href="#header" name="header">Header</a></h3> 31<pre class="literal-block"> 32#include <<a href="../../../../boost/mpl/assert.hpp" class="header">boost/mpl/assert.hpp</a>> 33</pre> 34</div> 35<div class="section" id="id1297"> 36<h3><a class="subsection-title" href="#parameters" name="parameters">Parameters</a></h3> 37<table border="1" class="docutils table"> 38<colgroup> 39<col width="15%" /> 40<col width="36%" /> 41<col width="48%" /> 42</colgroup> 43<thead valign="bottom"> 44<tr><th class="head">Parameter</th> 45<th class="head">Requirement</th> 46<th class="head">Description</th> 47</tr> 48</thead> 49<tbody valign="top"> 50<tr><td><tt class="literal"><span class="pre">condition</span></tt></td> 51<td>An integral constant expression</td> 52<td>A condition to be asserted.</td> 53</tr> 54<tr><td><tt class="literal"><span class="pre">message</span></tt></td> 55<td>A legal identifier token</td> 56<td>A custom message in a form of a legal C++ 57identifier token.</td> 58</tr> 59<tr><td><tt class="literal"><span class="pre">types</span></tt></td> 60<td>A legal function parameter list</td> 61<td>A parenthized list of types to be displayed 62in the error message.</td> 63</tr> 64</tbody> 65</table> 66</div> 67<div class="section" id="id1298"> 68<h3><a class="subsection-title" href="#expression-semantics" name="expression-semantics">Expression semantics</a></h3> 69<p>For any integral constant expression <tt class="literal"><span class="pre">expr</span></tt>, legal C++ identifier <tt class="literal"><span class="pre">message</span></tt>, and 70arbitrary types <tt class="literal"><span class="pre">t1</span></tt>, <tt class="literal"><span class="pre">t2</span></tt>,... <tt class="literal"><span class="pre">tn</span></tt>:</p> 71<pre class="literal-block"> 72<a href="./assert-msg.html" class="identifier">BOOST_MPL_ASSERT_MSG</a>( expr, message, (t1, t2,... tn) ); 73</pre> 74<table class="docutils field-list" frame="void" rules="none"> 75<col class="field-name" /> 76<col class="field-body" /> 77<tbody valign="top"> 78<tr class="field"><th class="field-name">Return type:</th><td class="field-body"><p class="first">None.</p> 79</td> 80</tr> 81<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><p class="first"><tt class="literal"><span class="pre">t1</span></tt>, <tt class="literal"><span class="pre">t2</span></tt>,... <tt class="literal"><span class="pre">tn</span></tt> are non-<tt class="literal"><span class="pre">void</span></tt>.</p> 82</td> 83</tr> 84<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><p class="first">Generates a compilation error if <tt class="literal"><span class="pre">expr</span> <span class="pre">!=</span> <span class="pre">true</span></tt>, otherwise 85has no effect.</p> 86<p>When possible within the compiler's diagnostic capabilities, 87the error message will include the <tt class="literal"><span class="pre">message</span></tt> identifier and the parenthized 88list of <tt class="literal"><span class="pre">t1</span></tt>, <tt class="literal"><span class="pre">t2</span></tt>,... <tt class="literal"><span class="pre">tn</span></tt> types, and have a general form of:</p> 89<pre class="last literal-block"> 90<em>...</em> ************( <em>...</em>::message )************)(t1, t2,... tn) <em>...</em> 91</pre> 92</td> 93</tr> 94</tbody> 95</table> 96<pre class="literal-block"> 97<a href="./assert-msg.html" class="identifier">BOOST_MPL_ASSERT_MSG</a>( expr, message, (types<t1, t2,... tn>) ); 98</pre> 99<table class="docutils field-list" frame="void" rules="none"> 100<col class="field-name" /> 101<col class="field-body" /> 102<tbody valign="top"> 103<tr class="field"><th class="field-name">Return type:</th><td class="field-body"><p class="first">None.</p> 104</td> 105</tr> 106<tr class="field"><th class="field-name">Precondition:</th><td class="field-body"><p class="first">None.</p> 107</td> 108</tr> 109<tr class="field"><th class="field-name">Semantics:</th><td class="field-body"><p class="first">Generates a compilation error if <tt class="literal"><span class="pre">expr</span> <span class="pre">!=</span> <span class="pre">true</span></tt>, otherwise 110has no effect.</p> 111<p>When possible within the compiler's diagnostics capabilities, 112the error message will include the <tt class="literal"><span class="pre">message</span></tt> identifier and the list of 113<tt class="literal"><span class="pre">t1</span></tt>, <tt class="literal"><span class="pre">t2</span></tt>,... <tt class="literal"><span class="pre">tn</span></tt> types, and have a general form of:</p> 114<pre class="last literal-block"> 115<em>...</em> ************( <em>...</em>::message )************)(types<t1, t2,... tn>) <em>...</em> 116</pre> 117</td> 118</tr> 119</tbody> 120</table> 121</div> 122<div class="section" id="id1299"> 123<h3><a class="subsection-title" href="#example" name="example">Example</a></h3> 124<pre class="literal-block"> 125template< typename T > struct my 126{ 127 // ... 128 <a href="./assert-msg.html" class="identifier">BOOST_MPL_ASSERT_MSG</a>( 129 is_integral<T>::value 130 , NON_INTEGRAL_TYPES_ARE_NOT_ALLOWED 131 , (T) 132 ); 133}; 134 135my<void*> test; 136 137// In instantiation of `my<void*>': 138// instantiated from here 139// conversion from ` 140// mpl_::failed************(my<void*>:: 141// NON_INTEGRAL_TYPES_ARE_NOT_ALLOWED::************)(void*) 142// ' to non-scalar type `mpl_::assert<false>' requested 143</pre> 144</div> 145<div class="section" id="id1300"> 146<h3><a class="subsection-title" href="#see-also" name="see-also">See also</a></h3> 147<p><a class="reference internal" href="./asserts.html">Asserts</a>, <a class="reference internal" href="./assert.html">BOOST_MPL_ASSERT</a>, <a class="reference internal" href="./assert-not.html">BOOST_MPL_ASSERT_NOT</a>, <a class="reference internal" href="./assert-relation.html">BOOST_MPL_ASSERT_RELATION</a></p> 148<!-- Macros/Asserts//BOOST_MPL_ASSERT_NOT --> 149</div> 150</div> 151 152<div class="footer-separator"></div> 153<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./assert.html" class="navigation-link">Prev</a> <a href="./assert-not.html" class="navigation-link">Next</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./assert.html" class="navigation-link">Back</a> <a href="./assert-not.html" class="navigation-link">Along</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./asserts.html" class="navigation-link">Up</a> <a href="../refmanual.html" class="navigation-link">Home</a></span><span class="navigation-group-separator"> | </span><span class="navigation-group"><a href="./refmanual_toc.html" class="navigation-link">Full TOC</a></span></td> 154<td><div class="copyright-footer"><div class="copyright">Copyright © 2001-2009 Aleksey Gurtovoy and David Abrahams</div> 155Distributed under the Boost Software License, Version 1.0. (See accompanying 156file LICENSE_1_0.txt or copy at <a class="reference external" href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)</div></td></tr></table></body> 157</html> 158