• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5<title>Using and building the library</title>
6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9<link rel="up" href="../thread.html" title="Chapter 39. Thread 4.8.0">
10<link rel="prev" href="../thread.html" title="Chapter 39. Thread 4.8.0">
11<link rel="next" href="changes.html" title="History">
12</head>
13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14<table cellpadding="2" width="100%"><tr>
15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
16<td align="center"><a href="../../../index.html">Home</a></td>
17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20<td align="center"><a href="../../../more/index.htm">More</a></td>
21</tr></table>
22<hr>
23<div class="spirit-nav">
24<a accesskey="p" href="../thread.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="changes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
25</div>
26<div class="section">
27<div class="titlepage"><div><div><h2 class="title" style="clear: both">
28<a name="thread.build"></a><a class="link" href="build.html" title="Using and building the library">Using and building the library</a>
29</h2></div></div></div>
30<div class="toc"><dl class="toc">
31<dt><span class="section"><a href="build.html#thread.build.configuration">Configuration</a></span></dt>
32<dt><span class="section"><a href="build.html#thread.build.limitations">Limitations</a></span></dt>
33</dl></div>
34<p>
35      Boost.Thread is configured following the conventions used to build <a href="http://www.boost.org/doc/libs/1_48_0/libs/config/doc/html/boost_config/boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" target="_top">libraries
36      with separate source code</a>. Boost.Thread will import/export the code
37      only if the user has specifically asked for it, by defining either BOOST_ALL_DYN_LINK
38      if they want all boost libraries to be dynamically linked, or BOOST_THREAD_DYN_LINK
39      if they want just this one to be dynamically liked.
40    </p>
41<p>
42      The definition of these macros determines whether BOOST_THREAD_USE_DLL is defined.
43      If BOOST_THREAD_USE_DLL is not defined, the library will define BOOST_THREAD_USE_DLL
44      or BOOST_THREAD_USE_LIB depending on whether the platform. On non windows platforms
45      BOOST_THREAD_USE_LIB is defined if is not defined. In windows platforms, BOOST_THREAD_USE_LIB
46      is defined if BOOST_THREAD_USE_DLL and the compiler supports auto-tss cleanup
47      with Boost.Threads (for the time been Msvc and Intel)
48    </p>
49<p>
50      The source code compiled when building the library defines a macros BOOST_THREAD_SOURCE
51      that is used to import or export it. The user must not define this macro in
52      any case.
53    </p>
54<p>
55      Boost.Thread depends on some non header-only libraries.
56    </p>
57<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
58<li class="listitem">
59          Boost.System: This dependency is mandatory and you will need to link with
60          the library.
61        </li>
62<li class="listitem">
63          Boost.Chrono: This dependency is optional (see below how to configure)
64          and you will need to link with the library if you use some of the time
65          related interfaces.
66        </li>
67<li class="listitem">
68          Boost.DateTime: This dependency is mandatory, but even if Boost.DateTime
69          is a non header-only library Boost.Thread uses only parts that are header-only,
70          so in principle you should not need to link with the library.
71        </li>
72</ul></div>
73<p>
74      It seems that there are some IDE (as e.g. Visual Studio) that deduce the libraries
75      that a program needs to link to inspecting the sources. Such IDE could force
76      to link to Boost.DateTime and/or Boost.Chrono.
77    </p>
78<p>
79      As the single mandatory dependency is to Boost.System, the following
80    </p>
81<pre class="programlisting"><span class="identifier">bjam</span> <span class="identifier">toolset</span><span class="special">=</span><span class="identifier">msvc</span><span class="special">-</span><span class="number">11.0</span> <span class="special">--</span><span class="identifier">build</span><span class="special">-</span><span class="identifier">type</span><span class="special">=</span><span class="identifier">complete</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">thread</span>
82</pre>
83<p>
84      will install only boost_thread and boost_system.
85    </p>
86<p>
87      Users of such IDE should force the Boost.Chrono and Boost.DateTime build using
88    </p>
89<pre class="programlisting"><span class="identifier">bjam</span> <span class="identifier">toolset</span><span class="special">=</span><span class="identifier">msvc</span><span class="special">-</span><span class="number">11.0</span> <span class="special">--</span><span class="identifier">build</span><span class="special">-</span><span class="identifier">type</span><span class="special">=</span><span class="identifier">complete</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">thread</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">chrono</span> <span class="special">--</span><span class="identifier">with</span><span class="special">-</span><span class="identifier">date_time</span>
90</pre>
91<p>
92      The following section describes all the macros used to configure Boost.Thread.
93    </p>
94<div class="section">
95<div class="titlepage"><div><div><h3 class="title">
96<a name="thread.build.configuration"></a><a class="link" href="build.html#thread.build.configuration" title="Configuration">Configuration</a>
97</h3></div></div></div>
98<div class="toc"><dl class="toc">
99<dt><span class="section"><a href="build.html#thread.build.configuration.chrono">Boost.Chrono</a></span></dt>
100<dt><span class="section"><a href="build.html#thread.build.configuration.move">Boost.Move</a></span></dt>
101<dt><span class="section"><a href="build.html#thread.build.configuration.date_time">Boost.DateTime</a></span></dt>
102<dt><span class="section"><a href="build.html#thread.build.configuration.move0">Boost.Atomic</a></span></dt>
103<dt><span class="section"><a href="build.html#thread.build.configuration.thread_eq"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code>
104        deprecated</a></span></dt>
105<dt><span class="section"><a href="build.html#thread.build.configuration.condition">boost::condition
106        deprecated</a></span></dt>
107<dt><span class="section"><a href="build.html#thread.build.configuration.nested_lock">Mutex nested
108        lock types deprecated</a></span></dt>
109<dt><span class="section"><a href="build.html#thread.build.configuration.id">thread::id</a></span></dt>
110<dt><span class="section"><a href="build.html#thread.build.configuration.shared_gen">Shared Locking
111        Generic</a></span></dt>
112<dt><span class="section"><a href="build.html#thread.build.configuration.shared_upwards">Shared Locking
113        Upwards Conversion</a></span></dt>
114<dt><span class="section"><a href="build.html#thread.build.configuration.explicit_cnv">Explicit Lock
115        Conversion</a></span></dt>
116<dt><span class="section"><a href="build.html#thread.build.configuration.future">unique_future versus
117        future</a></span></dt>
118<dt><span class="section"><a href="build.html#thread.build.configuration.lazy">promise lazy initialization</a></span></dt>
119<dt><span class="section"><a href="build.html#thread.build.configuration.alloc">promise Allocator
120        constructor</a></span></dt>
121<dt><span class="section"><a href="build.html#thread.build.configuration.terminate">Call to terminate
122        if joinable</a></span></dt>
123<dt><span class="section"><a href="build.html#thread.build.configuration.once_flag">once_flag</a></span></dt>
124<dt><span class="section"><a href="build.html#thread.build.configuration.deprecated">Signature parameter
125        for packaged_task</a></span></dt>
126<dt><span class="section"><a href="build.html#thread.build.configuration.thread_const">-var thread
127        constructor with variadic rvalue parameters</a></span></dt>
128<dt><span class="section"><a href="build.html#thread.build.configuration.get_invalid">future&lt;&gt;::get()
129        invalidates the future</a></span></dt>
130<dt><span class="section"><a href="build.html#thread.build.configuration.intr">Interruptions</a></span></dt>
131<dt><span class="section"><a href="build.html#thread.build.configuration.version">Version</a></span></dt>
132</dl></div>
133<div class="table">
134<a name="thread.build.configuration.default_values_for_configurable_features"></a><p class="title"><b>Table 39.1. Default Values for Configurable Features</b></p>
135<div class="table-contents"><table class="table" summary="Default Values for Configurable Features">
136<colgroup>
137<col>
138<col>
139<col>
140<col>
141<col>
142<col>
143</colgroup>
144<thead><tr>
145<th>
146                <p>
147                  Feature
148                </p>
149              </th>
150<th>
151                <p>
152                  Anti-Feature
153                </p>
154              </th>
155<th>
156                <p>
157                  V2
158                </p>
159              </th>
160<th>
161                <p>
162                  V3
163                </p>
164              </th>
165<th>
166                <p>
167                  V4
168                </p>
169              </th>
170<th>
171                <p>
172                  V5
173                </p>
174              </th>
175</tr></thead>
176<tbody>
177<tr>
178<td>
179                <p>
180                  USES_CHRONO
181                </p>
182              </td>
183<td>
184                <p>
185                  DONT_USE_CHRONO
186                </p>
187              </td>
188<td>
189                <p>
190                  YES/NO
191                </p>
192              </td>
193<td>
194                <p>
195                  YES/NO
196                </p>
197              </td>
198<td>
199                <p>
200                  YES/NO
201                </p>
202              </td>
203<td>
204                <p>
205                  YES/NO
206                </p>
207              </td>
208</tr>
209<tr>
210<td>
211                <p>
212                  PROVIDES_INTERRUPTIONS
213                </p>
214              </td>
215<td>
216                <p>
217                  DONT_PROVIDE_INTERRUPTIONS
218                </p>
219              </td>
220<td>
221                <p>
222                  YES
223                </p>
224              </td>
225<td>
226                <p>
227                  YES
228                </p>
229              </td>
230<td>
231                <p>
232                  YES
233                </p>
234              </td>
235<td>
236                <p>
237                  YES
238                </p>
239              </td>
240</tr>
241<tr>
242<td>
243                <p>
244                  THROW_IF_PRECONDITION_NOT_SATISFIED
245                </p>
246              </td>
247<td>
248                <p>
249                  -
250                </p>
251              </td>
252<td>
253                <p>
254                  NO
255                </p>
256              </td>
257<td>
258                <p>
259                  NO
260                </p>
261              </td>
262<td>
263                <p>
264                  NO
265                </p>
266              </td>
267<td>
268                <p>
269                  NO
270                </p>
271              </td>
272</tr>
273<tr>
274<td>
275                <p>
276                  PROVIDES_PROMISE_LAZY
277                </p>
278              </td>
279<td>
280                <p>
281                  DONT_PROVIDE_PROMISE_LAZY
282                </p>
283              </td>
284<td>
285                <p>
286                  YES
287                </p>
288              </td>
289<td>
290                <p>
291                  NO
292                </p>
293              </td>
294<td>
295                <p>
296                  NO
297                </p>
298              </td>
299<td>
300                <p>
301                  NO
302                </p>
303              </td>
304</tr>
305<tr>
306<td>
307                <p>
308                  PROVIDES_BASIC_THREAD_ID
309                </p>
310              </td>
311<td>
312                <p>
313                  DONT_PROVIDE_BASIC_THREAD_ID
314                </p>
315              </td>
316<td>
317                <p>
318                  NO
319                </p>
320              </td>
321<td>
322                <p>
323                  YES
324                </p>
325              </td>
326<td>
327                <p>
328                  YES
329                </p>
330              </td>
331<td>
332                <p>
333                  YES
334                </p>
335              </td>
336</tr>
337<tr>
338<td>
339                <p>
340                  PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
341                </p>
342              </td>
343<td>
344                <p>
345                  DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN
346                </p>
347              </td>
348<td>
349                <p>
350                  NO
351                </p>
352              </td>
353<td>
354                <p>
355                  YES
356                </p>
357              </td>
358<td>
359                <p>
360                  YES
361                </p>
362              </td>
363<td>
364                <p>
365                  YES
366                </p>
367              </td>
368</tr>
369<tr>
370<td>
371                <p>
372                  PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSION
373                </p>
374              </td>
375<td>
376                <p>
377                  DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION
378                </p>
379              </td>
380<td>
381                <p>
382                  NO
383                </p>
384              </td>
385<td>
386                <p>
387                  YES
388                </p>
389              </td>
390<td>
391                <p>
392                  YES
393                </p>
394              </td>
395<td>
396                <p>
397                  YES
398                </p>
399              </td>
400</tr>
401<tr>
402<td>
403                <p>
404                  PROVIDES_EXECUTORS
405                </p>
406              </td>
407<td>
408                <p>
409                  -
410                </p>
411              </td>
412<td>
413                <p>
414                  NO
415                </p>
416              </td>
417<td>
418                <p>
419                  NO
420                </p>
421              </td>
422<td>
423                <p>
424                  NO
425                </p>
426              </td>
427<td>
428                <p>
429                  YES
430                </p>
431              </td>
432</tr>
433<tr>
434<td>
435                <p>
436                  PROVIDES_EXPLICIT_LOCK_CONVERSION
437                </p>
438              </td>
439<td>
440                <p>
441                  DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION
442                </p>
443              </td>
444<td>
445                <p>
446                  NO
447                </p>
448              </td>
449<td>
450                <p>
451                  YES
452                </p>
453              </td>
454<td>
455                <p>
456                  YES
457                </p>
458              </td>
459<td>
460                <p>
461                  YES
462                </p>
463              </td>
464</tr>
465<tr>
466<td>
467                <p>
468                  PROVIDES_FUTURE
469                </p>
470              </td>
471<td>
472                <p>
473                  DONT_PROVIDE_FUTURE
474                </p>
475              </td>
476<td>
477                <p>
478                  NO
479                </p>
480              </td>
481<td>
482                <p>
483                  YES
484                </p>
485              </td>
486<td>
487                <p>
488                  YES
489                </p>
490              </td>
491<td>
492                <p>
493                  YES
494                </p>
495              </td>
496</tr>
497<tr>
498<td>
499                <p>
500                  PROVIDES_FUTURE_CTOR_ALLOCATORS
501                </p>
502              </td>
503<td>
504                <p>
505                  DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
506                </p>
507              </td>
508<td>
509                <p>
510                  NO
511                </p>
512              </td>
513<td>
514                <p>
515                  YES
516                </p>
517              </td>
518<td>
519                <p>
520                  YES
521                </p>
522              </td>
523<td>
524                <p>
525                  YES
526                </p>
527              </td>
528</tr>
529<tr>
530<td>
531                <p>
532                  PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
533                </p>
534              </td>
535<td>
536                <p>
537                  DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
538                </p>
539              </td>
540<td>
541                <p>
542                  NO
543                </p>
544              </td>
545<td>
546                <p>
547                  YES
548                </p>
549              </td>
550<td>
551                <p>
552                  YES
553                </p>
554              </td>
555<td>
556                <p>
557                  YES
558                </p>
559              </td>
560</tr>
561<tr>
562<td>
563                <p>
564                  PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
565                </p>
566              </td>
567<td>
568                <p>
569                  DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
570                </p>
571              </td>
572<td>
573                <p>
574                  NO
575                </p>
576              </td>
577<td>
578                <p>
579                  YES
580                </p>
581              </td>
582<td>
583                <p>
584                  YES
585                </p>
586              </td>
587<td>
588                <p>
589                  YES
590                </p>
591              </td>
592</tr>
593<tr>
594<td>
595                <p>
596                  PROVIDES_ONCE_CXX11
597                </p>
598              </td>
599<td>
600                <p>
601                  DONT_PROVIDE_ONCE_CXX11
602                </p>
603              </td>
604<td>
605                <p>
606                  NO
607                </p>
608              </td>
609<td>
610                <p>
611                  YES
612                </p>
613              </td>
614<td>
615                <p>
616                  YES
617                </p>
618              </td>
619<td>
620                <p>
621                  YES
622                </p>
623              </td>
624</tr>
625<tr>
626<td>
627                <p>
628                  USES_MOVE
629                </p>
630              </td>
631<td>
632                <p>
633                  DONT_USE_MOVE
634                </p>
635              </td>
636<td>
637                <p>
638                  NO
639                </p>
640              </td>
641<td>
642                <p>
643                  YES
644                </p>
645              </td>
646<td>
647                <p>
648                  YES
649                </p>
650              </td>
651<td>
652                <p>
653                  YES
654                </p>
655              </td>
656</tr>
657<tr>
658<td>
659                <p>
660                  USES_DATETIME
661                </p>
662              </td>
663<td>
664                <p>
665                  DONT_USE_DATETIME
666                </p>
667              </td>
668<td>
669                <p>
670                  YES/NO
671                </p>
672              </td>
673<td>
674                <p>
675                  YES/NO
676                </p>
677              </td>
678<td>
679                <p>
680                  YES/NO
681                </p>
682              </td>
683<td>
684                <p>
685                  YES/NO
686                </p>
687              </td>
688</tr>
689<tr>
690<td>
691                <p>
692                  PROVIDES_THREAD_EQ
693                </p>
694              </td>
695<td>
696                <p>
697                  DONT_PROVIDE_THREAD_EQ
698                </p>
699              </td>
700<td>
701                <p>
702                  YES
703                </p>
704              </td>
705<td>
706                <p>
707                  YES
708                </p>
709              </td>
710<td>
711                <p>
712                  NO
713                </p>
714              </td>
715<td>
716                <p>
717                  NO
718                </p>
719              </td>
720</tr>
721<tr>
722<td>
723                <p>
724                  PROVIDES_CONDITION
725                </p>
726              </td>
727<td>
728                <p>
729                  DONT_PROVIDE_CONDITION
730                </p>
731              </td>
732<td>
733                <p>
734                  YES
735                </p>
736              </td>
737<td>
738                <p>
739                  YES
740                </p>
741              </td>
742<td>
743                <p>
744                  NO
745                </p>
746              </td>
747<td>
748                <p>
749                  NO
750                </p>
751              </td>
752</tr>
753<tr>
754<td>
755                <p>
756                  PROVIDES_NESTED_LOCKS
757                </p>
758              </td>
759<td>
760                <p>
761                  DONT_PROVIDE_NESTED_LOCKS
762                </p>
763              </td>
764<td>
765                <p>
766                  YES
767                </p>
768              </td>
769<td>
770                <p>
771                  YES
772                </p>
773              </td>
774<td>
775                <p>
776                  NO
777                </p>
778              </td>
779<td>
780                <p>
781                  NO
782                </p>
783              </td>
784</tr>
785<tr>
786<td>
787                <p>
788                  PROVIDES_SIGNATURE_PACKAGED_TASK
789                </p>
790              </td>
791<td>
792                <p>
793                  DONT_PROVIDE_SIGNATURE_PACKAGED_TASK
794                </p>
795              </td>
796<td>
797                <p>
798                  NO
799                </p>
800              </td>
801<td>
802                <p>
803                  NO
804                </p>
805              </td>
806<td>
807                <p>
808                  YES
809                </p>
810              </td>
811<td>
812                <p>
813                  YES
814                </p>
815              </td>
816</tr>
817<tr>
818<td>
819                <p>
820                  PROVIDES_FUTURE_INVALID_AFTER_GET
821                </p>
822              </td>
823<td>
824                <p>
825                  DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
826                </p>
827              </td>
828<td>
829                <p>
830                  NO
831                </p>
832              </td>
833<td>
834                <p>
835                  NO
836                </p>
837              </td>
838<td>
839                <p>
840                  YES
841                </p>
842              </td>
843<td>
844                <p>
845                  YES
846                </p>
847              </td>
848</tr>
849<tr>
850<td>
851                <p>
852                  PROVIDES_VARIADIC_THREAD
853                </p>
854              </td>
855<td>
856                <p>
857                  DONT_PROVIDE_VARIADIC_THREAD
858                </p>
859              </td>
860<td>
861                <p>
862                  NO
863                </p>
864              </td>
865<td>
866                <p>
867                  NO
868                </p>
869              </td>
870<td>
871                <p>
872                  C++11
873                </p>
874              </td>
875<td>
876                <p>
877                  C++11
878                </p>
879              </td>
880</tr>
881</tbody>
882</table></div>
883</div>
884<br class="table-break"><div class="section">
885<div class="titlepage"><div><div><h4 class="title">
886<a name="thread.build.configuration.chrono"></a><a class="link" href="build.html#thread.build.configuration.chrono" title="Boost.Chrono">Boost.Chrono</a>
887</h4></div></div></div>
888<p>
889          Boost.Thread uses by default Boost.Chrono for the time related functions
890          and define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_CHRONO</span></code>
891          if <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code>
892          is not defined. The user should define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code>
893          for compilers that don't work well with Boost.Chrono.
894        </p>
895<div class="warning"><table border="0" summary="Warning">
896<tr>
897<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
898<th align="left">Warning</th>
899</tr>
900<tr><td align="left" valign="top"><p>
901            When defined BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_CHRONO is
902            defined independently of user settings.
903          </p></td></tr>
904</table></div>
905</div>
906<div class="section">
907<div class="titlepage"><div><div><h4 class="title">
908<a name="thread.build.configuration.move"></a><a class="link" href="build.html#thread.build.configuration.move" title="Boost.Move">Boost.Move</a>
909</h4></div></div></div>
910<p>
911          Boost.Thread uses by default an internal move semantic implementation.
912          Since version 3.0.0 you can use the move emulation emulation provided by
913          Boost.Move.
914        </p>
915<p>
916          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
917          <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_MOVE</span> </code>
918          if you want to use Boost.Move interface. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
919          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_MOVE</span> </code>
920          if you don't want to use Boost.Move interface.
921        </p>
922</div>
923<div class="section">
924<div class="titlepage"><div><div><h4 class="title">
925<a name="thread.build.configuration.date_time"></a><a class="link" href="build.html#thread.build.configuration.date_time" title="Boost.DateTime">Boost.DateTime</a>
926</h4></div></div></div>
927<p>
928          The Boost.DateTime time related functions introduced in Boost 1.35.0, using
929          the <a class="link" href="../date_time.html" title="Chapter 13. Boost.Date_Time">Boost.Date_Time</a> library are deprecated.
930          These include (but are not limited to):
931        </p>
932<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
933<li class="listitem">
934              <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep" title="Non-member function sleep() DEPRECATED"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a>
935            </li>
936<li class="listitem">
937              <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join() DEPRECATED"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a>
938            </li>
939<li class="listitem">
940              <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.timed_wait" title="bool timed_wait(boost::unique_lock&lt;boost::mutex&gt;&amp; lock,boost::system_time const&amp; abs_time)"><code class="computeroutput"><span class="identifier">timed_wait</span><span class="special">()</span></code></a>
941            </li>
942<li class="listitem">
943              <a class="link" href="synchronization.html#thread.synchronization.mutex_concepts.timed_lockable.timed_lock" title="m.timed_lock(abs_time)"><code class="computeroutput"><span class="identifier">timed_lock</span><span class="special">()</span></code></a>
944            </li>
945</ul></div>
946<p>
947          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;=</span><span class="number">3</span></code> &amp;&amp;
948          defined BOOST_THREAD_PLATFORM_PTHREAD define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_DATETIME</span></code>
949          if you don't want to use Boost.DateTime related interfaces. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;</span><span class="number">3</span></code> &amp;&amp; defined BOOST_THREAD_PLATFORM_PTHREAD
950          define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_DATETIME</span></code>
951          if you want to use Boost.DateTime related interfaces.
952        </p>
953<div class="warning"><table border="0" summary="Warning">
954<tr>
955<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
956<th align="left">Warning</th>
957</tr>
958<tr><td align="left" valign="top"><p>
959            When defined BOOST_THREAD_PLATFORM_WIN32 BOOST_THREAD_USES_DATETIME is
960            defined independently of user settings.
961          </p></td></tr>
962</table></div>
963</div>
964<div class="section">
965<div class="titlepage"><div><div><h4 class="title">
966<a name="thread.build.configuration.move0"></a><a class="link" href="build.html#thread.build.configuration.move0" title="Boost.Atomic">Boost.Atomic</a>
967</h4></div></div></div>
968<p>
969          Boost.Thread uses by default Boost.Atomic in POSIX platforms to implement
970          call_once..
971        </p>
972<p>
973          Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_ATOMIC</span>
974          </code> if you want to use Boost.Atomic. Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_ATOMIC</span>
975          </code> if you don't want to use Boost.Atomic or if it is not supported
976          in your platform.
977        </p>
978</div>
979<div class="section">
980<div class="titlepage"><div><div><h4 class="title">
981<a name="thread.build.configuration.thread_eq"></a><a class="link" href="build.html#thread.build.configuration.thread_eq" title="boost::thread::operator== deprecated"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code>
982        deprecated</a>
983</h4></div></div></div>
984<p>
985          The following operators are deprecated:
986        </p>
987<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
988<li class="listitem">
989              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code>
990            </li>
991<li class="listitem">
992              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="keyword">operator</span><span class="special">!=</span></code>
993            </li>
994</ul></div>
995<p>
996          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_EQ</span></code>
997          is defined Boost.Thread provides these deprecated feature.
998        </p>
999<p>
1000          Use instead
1001        </p>
1002<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1003<li class="listitem">
1004              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">::</span><span class="keyword">operator</span><span class="special">==</span></code>
1005            </li>
1006<li class="listitem">
1007              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">::</span><span class="keyword">operator</span><span class="special">!=</span></code>
1008            </li>
1009</ul></div>
1010<div class="warning"><table border="0" summary="Warning">
1011<tr>
1012<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
1013<th align="left">Warning</th>
1014</tr>
1015<tr><td align="left" valign="top"><p>
1016            This is a breaking change respect to version 1.x.
1017          </p></td></tr>
1018</table></div>
1019<p>
1020          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">4</span></code> define
1021          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_EQ</span>
1022          </code> if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;</span><span class="number">4</span></code> define
1023          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_EQ</span>
1024          </code> if you don't want this feature.
1025        </p>
1026</div>
1027<div class="section">
1028<div class="titlepage"><div><div><h4 class="title">
1029<a name="thread.build.configuration.condition"></a><a class="link" href="build.html#thread.build.configuration.condition" title="boost::condition deprecated">boost::condition
1030        deprecated</a>
1031</h4></div></div></div>
1032<p>
1033          <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition</span></code> is deprecated. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_CONDITION</span></code> is defined
1034          Boost.Thread provides this deprecated feature.
1035        </p>
1036<p>
1037          Use instead <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span></code>.
1038        </p>
1039<div class="warning"><table border="0" summary="Warning">
1040<tr>
1041<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
1042<th align="left">Warning</th>
1043</tr>
1044<tr><td align="left" valign="top"><p>
1045            This is a breaking change respect to version 1.x.
1046          </p></td></tr>
1047</table></div>
1048<p>
1049          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;</span><span class="number">3</span></code> define
1050          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_CONDITION</span></code>
1051          if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;=</span><span class="number">3</span></code> define
1052          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_CONDITION</span></code>
1053          if you don't want this feature.
1054        </p>
1055</div>
1056<div class="section">
1057<div class="titlepage"><div><div><h4 class="title">
1058<a name="thread.build.configuration.nested_lock"></a><a class="link" href="build.html#thread.build.configuration.nested_lock" title="Mutex nested lock types deprecated">Mutex nested
1059        lock types deprecated</a>
1060</h4></div></div></div>
1061<p>
1062          The following nested typedefs are deprecated:
1063        </p>
1064<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1065<li class="listitem">
1066              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>,
1067            </li>
1068<li class="listitem">
1069              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>,
1070            </li>
1071<li class="listitem">
1072              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>
1073            </li>
1074<li class="listitem">
1075              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>
1076            </li>
1077<li class="listitem">
1078              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">::</span><span class="identifier">timed_scoped_timed_lock</span></code>
1079            </li>
1080<li class="listitem">
1081              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>,
1082            </li>
1083<li class="listitem">
1084              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>,
1085            </li>
1086<li class="listitem">
1087              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">scoped_lock</span></code>
1088            </li>
1089<li class="listitem">
1090              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">scoped_try_lock</span></code>
1091            </li>
1092<li class="listitem">
1093              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">::</span><span class="identifier">timed_scoped_timed_lock</span></code>
1094            </li>
1095</ul></div>
1096<p>
1097          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_NESTED_LOCKS</span></code>
1098          is defined Boost.Thread provides these deprecated feature.
1099        </p>
1100<p>
1101          Use instead * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span></code>,
1102          * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mutex</span><span class="special">&gt;</span></code>
1103          with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code>
1104          constructor, * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&gt;</span></code>
1105          * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&gt;</span></code>
1106          with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code>
1107          constructor * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">timed_mutex</span><span class="special">&gt;</span></code>
1108          * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">&gt;</span></code>,
1109          * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_mutex</span><span class="special">&gt;</span></code>
1110          with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code>
1111          constructor, * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">&gt;</span></code>
1112          * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">&gt;</span></code>
1113          with the <code class="computeroutput"><span class="identifier">try_to_lock_t</span></code>
1114          constructor * <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_lock</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">recursive_timed_mutex</span><span class="special">&gt;</span></code>
1115        </p>
1116<div class="warning"><table border="0" summary="Warning">
1117<tr>
1118<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
1119<th align="left">Warning</th>
1120</tr>
1121<tr><td align="left" valign="top"><p>
1122            This is a breaking change respect to version 1.x.
1123          </p></td></tr>
1124</table></div>
1125<p>
1126          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">4</span></code> define
1127          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_NESTED_LOCKS</span></code>
1128          if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;</span><span class="number">4</span></code> define
1129          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS</span></code>
1130          if you don't want thes features.
1131        </p>
1132</div>
1133<div class="section">
1134<div class="titlepage"><div><div><h4 class="title">
1135<a name="thread.build.configuration.id"></a><a class="link" href="build.html#thread.build.configuration.id" title="thread::id">thread::id</a>
1136</h4></div></div></div>
1137<p>
1138          Boost.Thread uses by default a thread::id on Posix based on the pthread
1139          type (BOOST_THREAD_PROVIDES_BASIC_THREAD_ID). For backward compatibility
1140          and also for compilers that don't work well with this modification the
1141          user can define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID</span></code>.
1142        </p>
1143<p>
1144          Define <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID</span>
1145          </code> if you don't want these features.
1146        </p>
1147</div>
1148<div class="section">
1149<div class="titlepage"><div><div><h4 class="title">
1150<a name="thread.build.configuration.shared_gen"></a><a class="link" href="build.html#thread.build.configuration.shared_gen" title="Shared Locking Generic">Shared Locking
1151        Generic</a>
1152</h4></div></div></div>
1153<p>
1154          The shared mutex implementation on Windows platform provides currently
1155          less functionality than the generic one that is used for PTheads based
1156          platforms. In order to have access to these functions, the user needs to
1157          define <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span></code>
1158          to use the generic implementation, that while could be less efficient,
1159          provides all the functions.
1160        </p>
1161<p>
1162          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1163          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span>
1164          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1165          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN</span>
1166          </code> if you don't want these features.
1167        </p>
1168</div>
1169<div class="section">
1170<div class="titlepage"><div><div><h4 class="title">
1171<a name="thread.build.configuration.shared_upwards"></a><a class="link" href="build.html#thread.build.configuration.shared_upwards" title="Shared Locking Upwards Conversion">Shared Locking
1172        Upwards Conversion</a>
1173</h4></div></div></div>
1174<p>
1175          Boost.Threads includes in version 3 the Shared Locking Upwards Conversion
1176          as defined in <a href="http://home.roadrunner.com/~hinnant/bloomington/shared_mutex.html" target="_top">Shared
1177          Locking</a>. These conversions need to be used carefully to avoid deadlock
1178          or livelock. The user need to define explicitly <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span></code>
1179          to get these upwards conversions.
1180        </p>
1181<p>
1182          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1183          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span>
1184          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1185          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSION</span>
1186          </code> if you don't want these features.
1187        </p>
1188</div>
1189<div class="section">
1190<div class="titlepage"><div><div><h4 class="title">
1191<a name="thread.build.configuration.explicit_cnv"></a><a class="link" href="build.html#thread.build.configuration.explicit_cnv" title="Explicit Lock Conversion">Explicit Lock
1192        Conversion</a>
1193</h4></div></div></div>
1194<p>
1195          In <a href="http://home.roadrunner.com/~hinnant/bloomington/shared_mutex.html" target="_top">Shared
1196          Locking</a> the lock conversions are explicit. As this explicit conversion
1197          breaks the lock interfaces, it is provided only if the <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span></code>
1198          is defined.
1199        </p>
1200<p>
1201          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1202          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span>
1203          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">3</span></code> define
1204          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION</span>
1205          </code> if you don't want these features.
1206        </p>
1207</div>
1208<div class="section">
1209<div class="titlepage"><div><div><h4 class="title">
1210<a name="thread.build.configuration.future"></a><a class="link" href="build.html#thread.build.configuration.future" title="unique_future versus future">unique_future versus
1211        future</a>
1212</h4></div></div></div>
1213<p>
1214          C++11 uses <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">future</span></code>. Versions of Boost.Thread previous
1215          to version 3.0.0 uses <code class="computeroutput"><span class="identifier">boost</span><span class="special">:</span><span class="identifier">unique_future</span></code>.
1216          Since version 3.0.0 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">future</span></code>
1217          replaces <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span></code> when <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code>
1218          is defined. The documentation doesn't contains anymore however <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">unique_future</span></code>.
1219        </p>
1220<p>
1221          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1222          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code>
1223          if you want to use boost::future. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1224          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE</span></code>
1225          if you want to use boost::unique_future.
1226        </p>
1227</div>
1228<div class="section">
1229<div class="titlepage"><div><div><h4 class="title">
1230<a name="thread.build.configuration.lazy"></a><a class="link" href="build.html#thread.build.configuration.lazy" title="promise lazy initialization">promise lazy initialization</a>
1231</h4></div></div></div>
1232<p>
1233          C++11 promise initialize the associated state at construction time. Versions
1234          of Boost.Thread previous to version 3.0.0 initialize it lazily at any point
1235          in time in which this associated state is needed.
1236        </p>
1237<p>
1238          Since version 3.0.0 this difference in behavior can be configured. When
1239          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span></code>
1240          is defined the backward compatible behavior is provided.
1241        </p>
1242<p>
1243          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1244          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY</span>
1245          </code> if you want to use boost::future. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1246          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span>
1247          </code> if you want to use boost::unique_future.
1248        </p>
1249</div>
1250<div class="section">
1251<div class="titlepage"><div><div><h4 class="title">
1252<a name="thread.build.configuration.alloc"></a><a class="link" href="build.html#thread.build.configuration.alloc" title="promise Allocator constructor">promise Allocator
1253        constructor</a>
1254</h4></div></div></div>
1255<p>
1256          C++11 std::promise provides constructors with allocators.
1257        </p>
1258<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">R</span><span class="special">&gt;</span>
1259<span class="keyword">class</span> <span class="identifier">promise</span>
1260<span class="special">{</span>
1261  <span class="keyword">public</span><span class="special">:</span>
1262    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Allocator</span><span class="special">&gt;</span>
1263    <span class="keyword">explicit</span> <span class="identifier">promise</span><span class="special">(</span><span class="identifier">allocator_arg_t</span><span class="special">,</span> <span class="identifier">Allocator</span> <span class="identifier">a</span><span class="special">);</span>
1264  <span class="comment">// ...</span>
1265<span class="special">};</span>
1266<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special">&lt;</span><span class="identifier">promise</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Alloc</span><span class="special">&gt;:</span> <span class="identifier">true_type</span> <span class="special">{};</span>
1267</pre>
1268<p>
1269          where
1270        </p>
1271<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">allocator_arg_t</span> <span class="special">{</span> <span class="special">};</span>
1272<span class="keyword">constexpr</span> <span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg</span> <span class="special">=</span> <span class="identifier">allocator_arg_t</span><span class="special">();</span>
1273
1274<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">&gt;</span> <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special">;</span>
1275</pre>
1276<p>
1277          Since version 3.0.0 Boost.Thread implements this constructor using the
1278          following interface
1279        </p>
1280<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span>
1281<span class="special">{</span>
1282  <span class="keyword">typedef</span> <span class="identifier">container</span><span class="special">::</span><span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg_t</span><span class="special">;</span>
1283  <span class="keyword">constexpr</span> <span class="identifier">allocator_arg_t</span> <span class="identifier">allocator_arg</span> <span class="special">=</span> <span class="special">{};</span>
1284
1285  <span class="keyword">namespace</span> <span class="identifier">container</span>
1286  <span class="special">{</span>
1287    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">R</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">&gt;</span>
1288    <span class="keyword">struct</span> <span class="identifier">uses_allocator</span><span class="special">&lt;</span><span class="identifier">promise</span><span class="special">&lt;</span><span class="identifier">R</span><span class="special">&gt;,</span><span class="identifier">Alloc</span><span class="special">&gt;:</span> <span class="identifier">true_type</span> <span class="special">{};</span>
1289  <span class="special">}</span>
1290  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Alloc</span><span class="special">&gt;</span>
1291  <span class="keyword">struct</span> <span class="identifier">uses_allocator</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">container</span><span class="special">::</span><span class="identifier">uses_allocator</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Alloc</span><span class="special">&gt;</span> <span class="special">{};</span>
1292<span class="special">}</span>
1293</pre>
1294<p>
1295          which introduces a dependency on Boost.Container. This feature is provided
1296          only if <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span></code>
1297          is defined.
1298        </p>
1299<p>
1300          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1301          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span>
1302          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1303          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span>
1304          </code> if you don't want these features.
1305        </p>
1306</div>
1307<div class="section">
1308<div class="titlepage"><div><div><h4 class="title">
1309<a name="thread.build.configuration.terminate"></a><a class="link" href="build.html#thread.build.configuration.terminate" title="Call to terminate if joinable">Call to terminate
1310        if joinable</a>
1311</h4></div></div></div>
1312<p>
1313          C++11 has a different semantic for the thread destructor and the move assignment.
1314          Instead of detaching the thread, calls to terminate() if the thread was
1315          joinable. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span></code>
1316          and <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span></code>
1317          is defined Boost.Thread provides the C++ semantic.
1318        </p>
1319<p>
1320          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1321          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span>
1322          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1323          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE</span>
1324          </code> if you don't want these features.
1325        </p>
1326<p>
1327          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1328          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span>
1329          </code> if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1330          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE</span>
1331          </code> if you don't want these features.
1332        </p>
1333</div>
1334<div class="section">
1335<div class="titlepage"><div><div><h4 class="title">
1336<a name="thread.build.configuration.once_flag"></a><a class="link" href="build.html#thread.build.configuration.once_flag" title="once_flag">once_flag</a>
1337</h4></div></div></div>
1338<p>
1339          C++11 defines a default constructor for once_flag. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span>
1340          </code> is defined Boost.Thread provides this C++ semantics. In this case,
1341          the previous aggregate syntax is not supported.
1342        </p>
1343<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">once_flag</span> <span class="identifier">once</span> <span class="special">=</span> <span class="identifier">BOOST_ONCE_INIT</span><span class="special">;</span>
1344</pre>
1345<p>
1346          You should now just do
1347        </p>
1348<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">once_flag</span> <span class="identifier">once</span><span class="special">;</span>
1349</pre>
1350<p>
1351          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">==</span><span class="number">2</span></code> define
1352          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span></code>
1353          if you want these features. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">3</span></code> define
1354          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11</span></code>
1355          if you don't want these features.
1356        </p>
1357</div>
1358<div class="section">
1359<div class="titlepage"><div><div><h4 class="title">
1360<a name="thread.build.configuration.deprecated"></a><a class="link" href="build.html#thread.build.configuration.deprecated" title="Signature parameter for packaged_task">Signature parameter
1361        for packaged_task</a>
1362</h4></div></div></div>
1363<p>
1364          C++11 packaged task class has a Signature template parameter. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span>
1365          </code> is defined Boost.Thread provides this C++ feature.
1366        </p>
1367<div class="warning"><table border="0" summary="Warning">
1368<tr>
1369<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
1370<th align="left">Warning</th>
1371</tr>
1372<tr><td align="left" valign="top"><p>
1373            This is a breaking change respect to version 3.x.
1374          </p></td></tr>
1375</table></div>
1376<p>
1377          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;</span><span class="number">4</span></code> define
1378          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span></code>
1379          if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">4</span></code> define
1380          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK</span></code>
1381          if you don't want this feature.
1382        </p>
1383</div>
1384<div class="section">
1385<div class="titlepage"><div><div><h4 class="title">
1386<a name="thread.build.configuration.thread_const"></a><a class="link" href="build.html#thread.build.configuration.thread_const" title="-var thread constructor with variadic rvalue parameters">-var thread
1387        constructor with variadic rvalue parameters</a>
1388</h4></div></div></div>
1389<p>
1390          C++11 thread constructor accept a variable number of rvalue arguments has.
1391          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_VARIADIC_THREAD</span>
1392          </code> is defined Boost.Thread provides this C++ feature if the following
1393          are not defined
1394        </p>
1395<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1396<li class="listitem">
1397              BOOST_NO_SFINAE_EXPR
1398            </li>
1399<li class="listitem">
1400              BOOST_NO_CXX11_VARIADIC_TEMPLATES
1401            </li>
1402<li class="listitem">
1403              BOOST_NO_CXX11_DECLTYPE
1404            </li>
1405<li class="listitem">
1406              BOOST_NO_CXX11_DECLTYPE_N3276
1407            </li>
1408<li class="listitem">
1409              BOOST_NO_CXX11_RVALUE_REFERENCES
1410            </li>
1411<li class="listitem">
1412              BOOST_NO_CXX11_TRAILING_RESULT_TYPES
1413            </li>
1414<li class="listitem">
1415              BOOST_NO_CXX11_RVALUE_REFERENCES
1416            </li>
1417<li class="listitem">
1418              BOOST_NO_CXX11_HDR_TUPLE
1419            </li>
1420</ul></div>
1421<p>
1422          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;</span><span class="number">4</span></code> define
1423          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD</span>
1424          </code> if you don't want this feature.
1425        </p>
1426</div>
1427<div class="section">
1428<div class="titlepage"><div><div><h4 class="title">
1429<a name="thread.build.configuration.get_invalid"></a><a class="link" href="build.html#thread.build.configuration.get_invalid" title="future&lt;&gt;::get() invalidates the future">future&lt;&gt;::get()
1430        invalidates the future</a>
1431</h4></div></div></div>
1432<p>
1433          C++11 future&lt;&gt;::get() invalidates the future once its value has been
1434          obtained. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span>
1435          </code> is defined Boost.Thread provides this C++ feature.
1436        </p>
1437<div class="warning"><table border="0" summary="Warning">
1438<tr>
1439<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td>
1440<th align="left">Warning</th>
1441</tr>
1442<tr><td align="left" valign="top"><p>
1443            This is a breaking change respect to version 3.x.
1444          </p></td></tr>
1445</table></div>
1446<p>
1447          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&lt;</span><span class="number">4</span></code> define
1448          <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span></code>
1449          if you want this feature. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span><span class="special">&gt;=</span><span class="number">4</span></code> define
1450          <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET</span></code>
1451          if you don't want this feature.
1452        </p>
1453</div>
1454<div class="section">
1455<div class="titlepage"><div><div><h4 class="title">
1456<a name="thread.build.configuration.intr"></a><a class="link" href="build.html#thread.build.configuration.intr" title="Interruptions">Interruptions</a>
1457</h4></div></div></div>
1458<p>
1459          Thread interruption, while useful, makes any interruption point less efficient
1460          than if the thread were not interruptible.
1461        </p>
1462<p>
1463          When <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_INTERRUPTIONS</span></code>
1464          is defined Boost.Thread provides interruptions. When <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS</span></code>
1465          is defined Boost.Thread don't provide interruption.
1466        </p>
1467<p>
1468          Boost.Thread defines BOOST_THREAD_PROVIDES_INTERRUPTIONS if neither BOOST_THREAD_PROVIDES_INTERRUPTIONS
1469          nor BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS are defined, so that there
1470          is no compatibility break.
1471        </p>
1472</div>
1473<div class="section">
1474<div class="titlepage"><div><div><h4 class="title">
1475<a name="thread.build.configuration.version"></a><a class="link" href="build.html#thread.build.configuration.version" title="Version">Version</a>
1476</h4></div></div></div>
1477<p>
1478          <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code> defines
1479          the Boost.Thread version. The default version is 2. In this case the following
1480          breaking or extending macros are defined if the opposite is not requested:
1481        </p>
1482<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
1483              <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_PROMISE_LAZY</span></code>
1484            </li></ul></div>
1485<p>
1486          The user can request the version 3 by defining <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code>
1487          to 3. In this case the following breaking or extending macros are defined
1488          if the opposite is not requested:
1489        </p>
1490<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1491<li class="listitem">
1492              Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION</span>
1493              </code>
1494            </li>
1495<li class="listitem">
1496              Conformity &amp; Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE</span></code>
1497            </li>
1498<li class="listitem">
1499              Uniformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN</span></code>
1500            </li>
1501<li class="listitem">
1502              Extension <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS</span></code>
1503            </li>
1504<li class="listitem">
1505              Conformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS</span></code>
1506            </li>
1507<li class="listitem">
1508              Conformity &amp; Breaking change BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
1509            </li>
1510<li class="listitem">
1511              Conformity &amp; Breaking change BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
1512            </li>
1513<li class="listitem">
1514              Conformity &amp; Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_ONCE_CXX11</span></code>
1515            </li>
1516<li class="listitem">
1517              Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY</span></code>
1518            </li>
1519</ul></div>
1520<p>
1521          The user can request the version 4 by defining <code class="computeroutput"><span class="identifier">BOOST_THREAD_VERSION</span></code>
1522          to 4. In this case the following breaking or extending macros are defined
1523          if the opposite is not requested:
1524        </p>
1525<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1526<li class="listitem">
1527              Conformity &amp; Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK</span>
1528              </code>
1529            </li>
1530<li class="listitem">
1531              Conformity &amp; Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET</span>
1532              </code>
1533            </li>
1534<li class="listitem">
1535              Conformity <code class="computeroutput"><span class="identifier">BOOST_THREAD_PROVIDES_VARIADIC_THREAD</span></code>
1536            </li>
1537<li class="listitem">
1538              Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_THREAD_EQ</span></code>
1539            </li>
1540<li class="listitem">
1541              Breaking change <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_DATETIME</span></code>
1542            </li>
1543</ul></div>
1544</div>
1545</div>
1546<div class="section">
1547<div class="titlepage"><div><div><h3 class="title">
1548<a name="thread.build.limitations"></a><a class="link" href="build.html#thread.build.limitations" title="Limitations">Limitations</a>
1549</h3></div></div></div>
1550<div class="toc"><dl class="toc">
1551<dt><span class="section"><a href="build.html#thread.build.limitations.sun">SunPro</a></span></dt>
1552<dt><span class="section"><a href="build.html#thread.build.limitations.vacpp">VACPP</a></span></dt>
1553<dt><span class="section"><a href="build.html#thread.build.limitations.ce">WCE</a></span></dt>
1554</dl></div>
1555<p>
1556        Some compilers don't work correctly with some of the added features.
1557      </p>
1558<div class="section">
1559<div class="titlepage"><div><div><h4 class="title">
1560<a name="thread.build.limitations.sun"></a><a class="link" href="build.html#thread.build.limitations.sun" title="SunPro">SunPro</a>
1561</h4></div></div></div>
1562<p>
1563          If __SUNPRO_CC &lt; 0x5100 the library defines
1564        </p>
1565<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
1566              <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_MOVE</span></code>
1567            </li></ul></div>
1568<p>
1569          If __SUNPRO_CC &lt; 0x5100 the library defines
1570        </p>
1571<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
1572              <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span></code>
1573            </li></ul></div>
1574</div>
1575<div class="section">
1576<div class="titlepage"><div><div><h4 class="title">
1577<a name="thread.build.limitations.vacpp"></a><a class="link" href="build.html#thread.build.limitations.vacpp" title="VACPP">VACPP</a>
1578</h4></div></div></div>
1579<p>
1580          If __IBMCPP__ &lt; 1100 the library defines
1581        </p>
1582<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
1583<li class="listitem">
1584              <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_USE_CHRONO</span></code>
1585            </li>
1586<li class="listitem">
1587              <code class="computeroutput"><span class="identifier">BOOST_THREAD_USES_DATE</span></code>
1588            </li>
1589</ul></div>
1590<p>
1591          And Boost.Thread doesn't links with Boost.Chrono.
1592        </p>
1593</div>
1594<div class="section">
1595<div class="titlepage"><div><div><h4 class="title">
1596<a name="thread.build.limitations.ce"></a><a class="link" href="build.html#thread.build.limitations.ce" title="WCE">WCE</a>
1597</h4></div></div></div>
1598<p>
1599          If _WIN32_WCE &amp;&amp; _WIN32_WCE==0x501 the library defines
1600        </p>
1601<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
1602              <code class="computeroutput"><span class="identifier">BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS</span></code>
1603            </li></ul></div>
1604</div>
1605</div>
1606</div>
1607<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
1608<td align="left"></td>
1609<td align="right"><div class="copyright-footer">Copyright © 2007 -11 Anthony Williams<br>Copyright © 2011 -17 Vicente J. Botet Escriba<p>
1610        Distributed under the Boost Software License, Version 1.0. (See accompanying
1611        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
1612      </p>
1613</div></td>
1614</tr></table>
1615<hr>
1616<div class="spirit-nav">
1617<a accesskey="p" href="../thread.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="changes.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
1618</div>
1619</body>
1620</html>
1621