Files
utility/compressed_pair.htm
T
Eric Niebler 4ca0c3b7c2 Merged revisions 40889-40921 via svnmerge from
https://svn.boost.org/svn/boost/trunk

........
  r40889 | nikiml | 2007-11-07 08:06:55 -0800 (Wed, 07 Nov 2007) | 1 line
  
  added forgotten array_object_manager_traits::get_pytype
........
  r40890 | bemandawes | 2007-11-07 08:08:09 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Copyright and/or License cleanup
........
  r40892 | nesotto | 2007-11-07 08:54:10 -0800 (Wed, 07 Nov 2007) | 1 line
  
  changed constants to inline function to avoid ODR problems
........
  r40893 | garcia | 2007-11-07 09:06:19 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  changed url to the right one.
........
  r40894 | johnmaddock | 2007-11-07 09:17:39 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added support for VC9.
........
  r40895 | johnmaddock | 2007-11-07 09:21:41 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Regenerated docs to add license info.
........
  r40896 | johnmaddock | 2007-11-07 09:38:19 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Removed PDF docs: we'll put these somewhere else.
  Fixed some license/copyright issues.
........
  r40897 | igaztanaga | 2007-11-07 09:55:18 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Increased shared memory size, since it was insufficient for 64 bit applications
........
  r40898 | jhunold | 2007-11-07 10:06:31 -0800 (Wed, 07 Nov 2007) | 4 lines
  
  Fix: remove <user-interface>gui from usage-requirements of QtGui.
  Rationale: <user-interface>gui merely disables console output window on <target-os>windows.
  But users often need console debug output when running Gui apps.
........
  r40900 | johnmaddock | 2007-11-07 10:26:11 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40901 | johnmaddock | 2007-11-07 10:27:08 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40902 | johnmaddock | 2007-11-07 10:29:00 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added copyright.
........
  r40903 | johnmaddock | 2007-11-07 10:38:23 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Added license info.
........
  r40906 | guwi17 | 2007-11-07 11:34:03 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  - io.hpp: added missing include
........
  r40907 | danieljames | 2007-11-07 12:27:25 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Copied Joel's license changes to the xhtml stylesheet.
........
  r40912 | bemandawes | 2007-11-07 13:54:48 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Initial commit. The starting point for the reference documentation is N1975, Filesystem Library Proposal for TR2 (Revision 3).
........
  r40914 | pdimov | 2007-11-07 14:47:55 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Attempt unspecified bool fix for Sun 5.7-5.9
........
  r40916 | bemandawes | 2007-11-07 17:47:36 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Explicitly say 'no top-posting'. Add links to Wikipedia posting article
........
  r40918 | bemandawes | 2007-11-07 18:55:21 -0800 (Wed, 07 Nov 2007) | 1 line
  
  Cope with larger errno on 64-bit systems
........
  r40919 | chris_kohlhoff | 2007-11-07 20:10:14 -0800 (Wed, 07 Nov 2007) | 2 lines
  
  Eliminate the need for an extra thread to perform timer dispatching.
........


[SVN r40922]
2007-11-08 05:53:54 +00:00

76 lines
4.3 KiB
HTML

<html>
<head>
<title>Header </title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Template" content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<boostcompressed_pair.hpp>
</head>
<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080">
<h2><img src="../../boost.png" width="276" height="86">Header &lt;<a href="../../boost/detail/compressed_pair.hpp">boost/compressed_pair.hpp</a>&gt;</h2>
<p>All of the contents of &lt;boost/compressed_pair.hpp&gt; are defined inside
namespace boost.</p>
<p>The class compressed pair is very similar to std::pair, but if either of the
template arguments are empty classes, then the "empty base-class optimisation"
is applied to compress the size of the pair.</p>
<pre>template &lt;class T1, class T2&gt;
class compressed_pair
{
public:
typedef T1 first_type;
typedef T2 second_type;
typedef typename call_traits&lt;first_type&gt;::param_type first_param_type;
typedef typename call_traits&lt;second_type&gt;::param_type second_param_type;
typedef typename call_traits&lt;first_type&gt;::reference first_reference;
typedef typename call_traits&lt;second_type&gt;::reference second_reference;
typedef typename call_traits&lt;first_type&gt;::const_reference first_const_reference;
typedef typename call_traits&lt;second_type&gt;::const_reference second_const_reference;
compressed_pair() : base() {}
compressed_pair(first_param_type x, second_param_type y);
explicit compressed_pair(first_param_type x);
explicit compressed_pair(second_param_type y);
compressed_pair&amp; operator=(const compressed_pair&amp;);
first_reference first();
first_const_reference first() const;
second_reference second();
second_const_reference second() const;
void swap(compressed_pair&amp; y);
};</pre>
<p>The two members of the pair can be accessed using the member functions first()
and second(). Note that not all member functions can be instantiated for all
template parameter types. In particular compressed_pair can be instantiated for
reference and array types, however in these cases the range of constructors
that can be used are limited. If types T1 and T2 are the same type, then there
is only one version of the single-argument constructor, and this constructor
initialises both values in the pair to the passed value.</p>
<P>Note that if either member is a POD type, then that member is not
zero-initialized by the compressed_pair default constructor: it's up to you to
supply an initial value for these types if you want them to have a default
value.</P>
<p>Note that compressed_pair can not be instantiated if either of the template
arguments is a union type, unless there is compiler support for
boost::is_union, or if boost::is_union is specialised for the union type.</p>
<p>Finally, a word of caution for Visual C++ 6 users: if either argument is an
empty type, then assigning to that member will produce memory corruption,
unless the empty type has a "do nothing" assignment operator defined. This is
due to a bug in the way VC6 generates implicit assignment operators.</p>
<h3>Acknowledgements</h3>
<p>Based on contributions by Steve Cleary, Beman Dawes, Howard Hinnant and John
Maddock.</p>
<p>Maintained by <a href="mailto:john@johnmaddock.co.uk">John Maddock</a>, the
latest version of this file can be found at <a href="http://www.boost.org">www.boost.org</a>,
and the boost discussion list at <a href="http://www.yahoogroups.com/list/boost">www.yahoogroups.com/list/boost</a>.</p>
<hr>
<p>Revised
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->07 November 2007<!--webbot bot="Timestamp" endspan i-checksum="40338" --></p>
<p>© Copyright Beman Dawes, 2000.</p>
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
</body>
</html>