Revision: 398 Author: alai04 Date: Fri May 28 00:05:44 2010 Log: 升级至1.43.0,第一批,libs/目录a-e子目录 http://code.google.com/p/boost-doc-zh/source/detail?r=398 Added: /trunk/libs/array/test /trunk/libs/array/test/Jamfile.v2 /trunk/libs/array/test/array0.cpp /trunk/libs/array/test/array1.cpp /trunk/libs/array/test/array2.cpp /trunk/libs/array/test/array3.cpp /trunk/libs/array/test/array4.cpp /trunk/libs/array/test/array5.cpp /trunk/libs/array/test/print.hpp /trunk/libs/config/doc/Jamfile.v2 /trunk/libs/config/doc/acknowledgements.qbk /trunk/libs/config/doc/config.qbk /trunk/libs/config/doc/configuring_boost.qbk /trunk/libs/config/doc/guidelines.qbk /trunk/libs/config/doc/macro_reference.qbk /trunk/libs/config/doc/rationale.qbk /trunk/libs/config/test/Jamfile.v2 /trunk/libs/config/test/all /trunk/libs/config/test/all/Jamfile.v2 /trunk/libs/config/test/all/options_v2.jam /trunk/libs/config/test/boost_no_0x_hdr_array.ipp /trunk/libs/config/test/boost_no_0x_hdr_chrono.ipp /trunk/libs/config/test/boost_no_0x_hdr_codecvt.ipp /trunk/libs/config/test/boost_no_0x_hdr_concepts.ipp /trunk/libs/config/test/boost_no_0x_hdr_condition_variable.ipp /trunk/libs/config/test/boost_no_0x_hdr_container_concepts.ipp /trunk/libs/config/test/boost_no_0x_hdr_forward_list.ipp /trunk/libs/config/test/boost_no_0x_hdr_future.ipp /trunk/libs/config/test/boost_no_0x_hdr_initializer_list.ipp /trunk/libs/config/test/boost_no_0x_hdr_iterator_concepts.ipp /trunk/libs/config/test/boost_no_0x_hdr_memory_concepts.ipp /trunk/libs/config/test/boost_no_0x_hdr_mutex.ipp /trunk/libs/config/test/boost_no_0x_hdr_random.ipp /trunk/libs/config/test/boost_no_0x_hdr_ratio.ipp /trunk/libs/config/test/boost_no_0x_hdr_regex.ipp /trunk/libs/config/test/boost_no_0x_hdr_system_error.ipp /trunk/libs/config/test/boost_no_0x_hdr_thread.ipp /trunk/libs/config/test/boost_no_0x_hdr_tuple.ipp /trunk/libs/config/test/boost_no_0x_hdr_type_traits.ipp /trunk/libs/config/test/boost_no_0x_hdr_unordered_map.ipp /trunk/libs/config/test/boost_no_0x_hdr_unordered_set.ipp /trunk/libs/config/test/boost_no_auto_declarations.ipp /trunk/libs/config/test/boost_no_auto_multidecl.ipp /trunk/libs/config/test/boost_no_char16_t.ipp /trunk/libs/config/test/boost_no_char32_t.ipp /trunk/libs/config/test/boost_no_concepts.ipp /trunk/libs/config/test/boost_no_constexpr.ipp /trunk/libs/config/test/boost_no_decltype.ipp /trunk/libs/config/test/boost_no_defaulted_functions.ipp /trunk/libs/config/test/boost_no_deleted_functions.ipp /trunk/libs/config/test/boost_no_explicit_cvt_ops.ipp /trunk/libs/config/test/boost_no_extern_template.ipp /trunk/libs/config/test/boost_no_function_template_default_args.ipp /trunk/libs/config/test/boost_no_initializer_lists.ipp /trunk/libs/config/test/boost_no_lambdas.ipp /trunk/libs/config/test/boost_no_long_long.ipp /trunk/libs/config/test/boost_no_nullptr.ipp /trunk/libs/config/test/boost_no_raw_literals.ipp /trunk/libs/config/test/boost_no_rvalue_references.ipp /trunk/libs/config/test/boost_no_scoped_enums.ipp /trunk/libs/config/test/boost_no_sfinae_expr.ipp /trunk/libs/config/test/boost_no_static_assert.ipp /trunk/libs/config/test/boost_no_std_unordered.ipp /trunk/libs/config/test/boost_no_template_aliases.ipp /trunk/libs/config/test/boost_no_unicode_literals.ipp /trunk/libs/config/test/boost_no_variadic_templates.ipp /trunk/libs/config/test/link /trunk/libs/config/test/link/Jamfile.v2 /trunk/libs/config/test/link/bc_gen.sh /trunk/libs/config/test/link/borland.mak /trunk/libs/config/test/link/common.sh /trunk/libs/config/test/link/link_test.cpp /trunk/libs/config/test/link/link_test.hpp /trunk/libs/config/test/link/main.cpp /trunk/libs/config/test/link/test /trunk/libs/config/test/link/test/Jamfile.v2 /trunk/libs/config/test/link/vc6-stlport.mak /trunk/libs/config/test/link/vc6.mak /trunk/libs/config/test/link/vc7-stlport.mak /trunk/libs/config/test/link/vc7.mak /trunk/libs/config/test/link/vc71-stlport.mak /trunk/libs/config/test/link/vc71.mak /trunk/libs/config/test/link/vc_gen.sh /trunk/libs/config/test/no_0x_hdr_array_fail.cpp /trunk/libs/config/test/no_0x_hdr_array_pass.cpp /trunk/libs/config/test/no_0x_hdr_chrono_fail.cpp /trunk/libs/config/test/no_0x_hdr_chrono_pass.cpp /trunk/libs/config/test/no_0x_hdr_codecvt_fail.cpp /trunk/libs/config/test/no_0x_hdr_codecvt_pass.cpp /trunk/libs/config/test/no_0x_hdr_concepts_fail.cpp /trunk/libs/config/test/no_0x_hdr_concepts_pass.cpp /trunk/libs/config/test/no_0x_hdr_condition_variable_fail.cpp /trunk/libs/config/test/no_0x_hdr_condition_variable_pass.cpp /trunk/libs/config/test/no_0x_hdr_container_concepts_fail.cpp /trunk/libs/config/test/no_0x_hdr_container_concepts_pass.cpp /trunk/libs/config/test/no_0x_hdr_forward_list_fail.cpp /trunk/libs/config/test/no_0x_hdr_forward_list_pass.cpp /trunk/libs/config/test/no_0x_hdr_future_fail.cpp /trunk/libs/config/test/no_0x_hdr_future_pass.cpp /trunk/libs/config/test/no_0x_hdr_initializer_list_fail.cpp /trunk/libs/config/test/no_0x_hdr_initializer_list_pass.cpp /trunk/libs/config/test/no_0x_hdr_iterator_concepts_fail.cpp /trunk/libs/config/test/no_0x_hdr_iterator_concepts_pass.cpp /trunk/libs/config/test/no_0x_hdr_memory_concepts_fail.cpp /trunk/libs/config/test/no_0x_hdr_memory_concepts_pass.cpp /trunk/libs/config/test/no_0x_hdr_mutex_fail.cpp /trunk/libs/config/test/no_0x_hdr_mutex_pass.cpp /trunk/libs/config/test/no_0x_hdr_random_fail.cpp /trunk/libs/config/test/no_0x_hdr_random_pass.cpp /trunk/libs/config/test/no_0x_hdr_ratio_fail.cpp /trunk/libs/config/test/no_0x_hdr_ratio_pass.cpp /trunk/libs/config/test/no_0x_hdr_regex_fail.cpp /trunk/libs/config/test/no_0x_hdr_regex_pass.cpp /trunk/libs/config/test/no_0x_hdr_system_error_fail.cpp /trunk/libs/config/test/no_0x_hdr_system_error_pass.cpp /trunk/libs/config/test/no_0x_hdr_thread_fail.cpp /trunk/libs/config/test/no_0x_hdr_thread_pass.cpp /trunk/libs/config/test/no_0x_hdr_tuple_fail.cpp /trunk/libs/config/test/no_0x_hdr_tuple_pass.cpp /trunk/libs/config/test/no_0x_hdr_type_traits_fail.cpp /trunk/libs/config/test/no_0x_hdr_type_traits_pass.cpp /trunk/libs/config/test/no_0x_hdr_unordered_map_fail.cpp /trunk/libs/config/test/no_0x_hdr_unordered_map_pass.cpp /trunk/libs/config/test/no_0x_hdr_unordered_set_fail.cpp /trunk/libs/config/test/no_0x_hdr_unordered_set_pass.cpp /trunk/libs/config/test/no_auto_declarations_fail.cpp /trunk/libs/config/test/no_auto_declarations_pass.cpp /trunk/libs/config/test/no_auto_multidecl_fail.cpp /trunk/libs/config/test/no_auto_multidecl_pass.cpp /trunk/libs/config/test/no_char16_t_fail.cpp /trunk/libs/config/test/no_char16_t_pass.cpp /trunk/libs/config/test/no_char32_t_fail.cpp /trunk/libs/config/test/no_char32_t_pass.cpp /trunk/libs/config/test/no_concepts_fail.cpp /trunk/libs/config/test/no_concepts_pass.cpp /trunk/libs/config/test/no_constexpr_fail.cpp /trunk/libs/config/test/no_constexpr_pass.cpp /trunk/libs/config/test/no_decltype_fail.cpp /trunk/libs/config/test/no_decltype_pass.cpp /trunk/libs/config/test/no_defaulted_functions_fail.cpp /trunk/libs/config/test/no_defaulted_functions_pass.cpp /trunk/libs/config/test/no_deleted_functions_fail.cpp /trunk/libs/config/test/no_deleted_functions_pass.cpp /trunk/libs/config/test/no_explicit_cvt_ops_fail.cpp /trunk/libs/config/test/no_explicit_cvt_ops_pass.cpp /trunk/libs/config/test/no_extern_template_fail.cpp /trunk/libs/config/test/no_extern_template_pass.cpp /trunk/libs/config/test/no_function_template_default_args_fail.cpp /trunk/libs/config/test/no_function_template_default_args_pass.cpp /trunk/libs/config/test/no_initializer_lists_fail.cpp /trunk/libs/config/test/no_initializer_lists_pass.cpp /trunk/libs/config/test/no_lambdas_fail.cpp /trunk/libs/config/test/no_lambdas_pass.cpp /trunk/libs/config/test/no_long_long_fail.cpp /trunk/libs/config/test/no_long_long_pass.cpp /trunk/libs/config/test/no_nullptr_fail.cpp /trunk/libs/config/test/no_nullptr_pass.cpp /trunk/libs/config/test/no_raw_literals_fail.cpp /trunk/libs/config/test/no_raw_literals_pass.cpp /trunk/libs/config/test/no_rvalue_references_fail.cpp /trunk/libs/config/test/no_rvalue_references_pass.cpp /trunk/libs/config/test/no_scoped_enums_fail.cpp /trunk/libs/config/test/no_scoped_enums_pass.cpp /trunk/libs/config/test/no_sfinae_expr_fail.cpp /trunk/libs/config/test/no_sfinae_expr_pass.cpp /trunk/libs/config/test/no_static_assert_fail.cpp /trunk/libs/config/test/no_static_assert_pass.cpp /trunk/libs/config/test/no_std_unordered_fail.cpp /trunk/libs/config/test/no_std_unordered_pass.cpp /trunk/libs/config/test/no_template_aliases_fail.cpp /trunk/libs/config/test/no_template_aliases_pass.cpp /trunk/libs/config/test/no_unicode_literals_fail.cpp /trunk/libs/config/test/no_unicode_literals_pass.cpp /trunk/libs/config/test/no_variadic_templates_fail.cpp /trunk/libs/config/test/no_variadic_templates_pass.cpp /trunk/libs/exception/test/exception_ptr_test.cpp Modified: /trunk/libs/algorithm/string/doc/design.xml /trunk/libs/algorithm/string/doc/usage.xml /trunk/libs/array/doc/array.xml /trunk/libs/asio/doc/history.qbk /trunk/libs/asio/doc/overview/allocation.qbk /trunk/libs/asio/doc/overview/serial_ports.qbk /trunk/libs/asio/doc/overview/threads.qbk /trunk/libs/asio/doc/reference.qbk /trunk/libs/asio/doc/reference.xsl /trunk/libs/asio/doc/using.qbk /trunk/libs/asio/example/http/client/async_client.cpp /trunk/libs/asio/example/http/client/sync_client.cpp /trunk/libs/asio/test/ip/tcp.cpp /trunk/libs/asio/test/read.cpp /trunk/libs/asio/test/write.cpp /trunk/libs/circular_buffer/doc/circular_buffer.html /trunk/libs/config/test/abi/abi_test.cpp /trunk/libs/config/test/abi/abi_test.hpp /trunk/libs/config/test/abi/main.cpp /trunk/libs/config/test/boost_has_2arg_use_facet.ipp /trunk/libs/config/test/boost_has_bethreads.ipp /trunk/libs/config/test/boost_has_clock_gettime.ipp /trunk/libs/config/test/boost_has_concepts.ipp /trunk/libs/config/test/boost_has_dirent_h.ipp /trunk/libs/config/test/boost_has_expm1.ipp /trunk/libs/config/test/boost_has_ftime.ipp /trunk/libs/config/test/boost_has_gettimeofday.ipp /trunk/libs/config/test/boost_has_hash.ipp /trunk/libs/config/test/boost_has_log1p.ipp /trunk/libs/config/test/boost_has_long_long.ipp /trunk/libs/config/test/boost_has_macro_use_facet.ipp /trunk/libs/config/test/boost_has_ms_int64.ipp /trunk/libs/config/test/boost_has_nanosleep.ipp /trunk/libs/config/test/boost_has_nl_types_h.ipp /trunk/libs/config/test/boost_has_nrvo.ipp /trunk/libs/config/test/boost_has_part_alloc.ipp /trunk/libs/config/test/boost_has_pthread_delay_np.ipp /trunk/libs/config/test/boost_has_pthread_ma_st.ipp /trunk/libs/config/test/boost_has_pthread_yield.ipp /trunk/libs/config/test/boost_has_pthreads.ipp /trunk/libs/config/test/boost_has_rvalue_refs.ipp /trunk/libs/config/test/boost_has_sched_yield.ipp /trunk/libs/config/test/boost_has_sgi_type_traits.ipp /trunk/libs/config/test/boost_has_sigaction.ipp /trunk/libs/config/test/boost_has_slist.ipp /trunk/libs/config/test/boost_has_static_assert.ipp /trunk/libs/config/test/boost_has_stdint_h.ipp /trunk/libs/config/test/boost_has_stlp_use_facet.ipp /trunk/libs/config/test/boost_has_tr1_array.ipp /trunk/libs/config/test/boost_has_tr1_bind.ipp /trunk/libs/config/test/boost_has_tr1_complex_over.ipp /trunk/libs/config/test/boost_has_tr1_complex_trig.ipp /trunk/libs/config/test/boost_has_tr1_function.ipp /trunk/libs/config/test/boost_has_tr1_hash.ipp /trunk/libs/config/test/boost_has_tr1_mem_fn.ipp /trunk/libs/config/test/boost_has_tr1_random.ipp /trunk/libs/config/test/boost_has_tr1_ref_wrap.ipp /trunk/libs/config/test/boost_has_tr1_regex.ipp /trunk/libs/config/test/boost_has_tr1_result_of.ipp /trunk/libs/config/test/boost_has_tr1_shared_ptr.ipp /trunk/libs/config/test/boost_has_tr1_tuple.ipp /trunk/libs/config/test/boost_has_tr1_type_traits.ipp /trunk/libs/config/test/boost_has_tr1_unordered_map.ipp /trunk/libs/config/test/boost_has_tr1_unordered_set.ipp /trunk/libs/config/test/boost_has_tr1_utility.ipp /trunk/libs/config/test/boost_has_unistd_h.ipp /trunk/libs/config/test/boost_has_variadic_tmpl.ipp /trunk/libs/config/test/boost_has_vc6_mem_templ.ipp /trunk/libs/config/test/boost_has_vc_iterator.ipp /trunk/libs/config/test/boost_has_winthreads.ipp /trunk/libs/config/test/boost_no_adl_barrier.ipp /trunk/libs/config/test/boost_no_arg_dep_lookup.ipp /trunk/libs/config/test/boost_no_array_type_spec.ipp /trunk/libs/config/test/boost_no_auto_ptr.ipp /trunk/libs/config/test/boost_no_bcb_partial_spec.ipp /trunk/libs/config/test/boost_no_ctype_functions.ipp /trunk/libs/config/test/boost_no_cv_spec.ipp /trunk/libs/config/test/boost_no_cv_void_spec.ipp /trunk/libs/config/test/boost_no_cwchar.ipp /trunk/libs/config/test/boost_no_cwctype.ipp /trunk/libs/config/test/boost_no_ded_typename.ipp /trunk/libs/config/test/boost_no_dep_nested_class.ipp /trunk/libs/config/test/boost_no_dep_val_param.ipp /trunk/libs/config/test/boost_no_excep_std.ipp /trunk/libs/config/test/boost_no_exceptions.ipp /trunk/libs/config/test/boost_no_exp_func_tem_arg.ipp /trunk/libs/config/test/boost_no_func_tmp_order.ipp /trunk/libs/config/test/boost_no_function_type_spec.ipp /trunk/libs/config/test/boost_no_i64_limits.ipp /trunk/libs/config/test/boost_no_inline_memb_init.ipp /trunk/libs/config/test/boost_no_integral_int64_t.ipp /trunk/libs/config/test/boost_no_iosfwd.ipp /trunk/libs/config/test/boost_no_iostream.ipp /trunk/libs/config/test/boost_no_is_abstract.ipp /trunk/libs/config/test/boost_no_iter_construct.ipp /trunk/libs/config/test/boost_no_limits.ipp /trunk/libs/config/test/boost_no_limits_const_exp.ipp /trunk/libs/config/test/boost_no_ll_limits.ipp /trunk/libs/config/test/boost_no_mem_func_spec.ipp /trunk/libs/config/test/boost_no_mem_tem_keyword.ipp /trunk/libs/config/test/boost_no_mem_tem_pnts.ipp /trunk/libs/config/test/boost_no_mem_templ_frnds.ipp /trunk/libs/config/test/boost_no_mem_templates.ipp /trunk/libs/config/test/boost_no_nested_friendship.ipp /trunk/libs/config/test/boost_no_ops_in_namespace.ipp /trunk/libs/config/test/boost_no_part_spec_def_args.ipp /trunk/libs/config/test/boost_no_partial_spec.ipp /trunk/libs/config/test/boost_no_priv_aggregate.ipp /trunk/libs/config/test/boost_no_ptr_mem_const.ipp /trunk/libs/config/test/boost_no_ret_det.ipp /trunk/libs/config/test/boost_no_rtti.ipp /trunk/libs/config/test/boost_no_sfinae.ipp /trunk/libs/config/test/boost_no_sstream.ipp /trunk/libs/config/test/boost_no_std_allocator.ipp /trunk/libs/config/test/boost_no_std_distance.ipp /trunk/libs/config/test/boost_no_std_iter_traits.ipp /trunk/libs/config/test/boost_no_std_iterator.ipp /trunk/libs/config/test/boost_no_std_locale.ipp /trunk/libs/config/test/boost_no_std_messages.ipp /trunk/libs/config/test/boost_no_std_min_max.ipp /trunk/libs/config/test/boost_no_std_oi_assign.ipp /trunk/libs/config/test/boost_no_std_typeinfo.ipp /trunk/libs/config/test/boost_no_std_use_facet.ipp /trunk/libs/config/test/boost_no_std_wstreambuf.ipp /trunk/libs/config/test/boost_no_std_wstring.ipp /trunk/libs/config/test/boost_no_stdc_namespace.ipp /trunk/libs/config/test/boost_no_swprintf.ipp /trunk/libs/config/test/boost_no_template_streams.ipp /trunk/libs/config/test/boost_no_template_template.ipp /trunk/libs/config/test/boost_no_two_phase_lookup.ipp /trunk/libs/config/test/boost_no_typeid.ipp /trunk/libs/config/test/boost_no_typename_with_ctor.ipp /trunk/libs/config/test/boost_no_using_breaks_adl.ipp /trunk/libs/config/test/boost_no_using_decl_overld.ipp /trunk/libs/config/test/boost_no_using_template.ipp /trunk/libs/config/test/boost_no_void_returns.ipp /trunk/libs/config/test/boost_no_wchar_t.ipp /trunk/libs/config/test/config_info.cpp /trunk/libs/config/test/config_test.cpp /trunk/libs/config/test/has_2arg_use_facet_fail.cpp /trunk/libs/config/test/has_2arg_use_facet_pass.cpp /trunk/libs/config/test/has_bethreads_fail.cpp /trunk/libs/config/test/has_bethreads_pass.cpp /trunk/libs/config/test/has_clock_gettime_fail.cpp /trunk/libs/config/test/has_clock_gettime_pass.cpp /trunk/libs/config/test/has_concepts_fail.cpp /trunk/libs/config/test/has_concepts_pass.cpp /trunk/libs/config/test/has_dirent_h_fail.cpp /trunk/libs/config/test/has_dirent_h_pass.cpp /trunk/libs/config/test/has_expm1_fail.cpp /trunk/libs/config/test/has_expm1_pass.cpp /trunk/libs/config/test/has_ftime_fail.cpp /trunk/libs/config/test/has_ftime_pass.cpp /trunk/libs/config/test/has_gettimeofday_fail.cpp /trunk/libs/config/test/has_gettimeofday_pass.cpp /trunk/libs/config/test/has_hash_fail.cpp /trunk/libs/config/test/has_hash_pass.cpp /trunk/libs/config/test/has_log1p_fail.cpp /trunk/libs/config/test/has_log1p_pass.cpp /trunk/libs/config/test/has_long_long_fail.cpp /trunk/libs/config/test/has_long_long_pass.cpp /trunk/libs/config/test/has_macro_use_facet_fail.cpp /trunk/libs/config/test/has_macro_use_facet_pass.cpp /trunk/libs/config/test/has_ms_int64_fail.cpp /trunk/libs/config/test/has_ms_int64_pass.cpp /trunk/libs/config/test/has_nanosleep_fail.cpp /trunk/libs/config/test/has_nanosleep_pass.cpp /trunk/libs/config/test/has_nl_types_h_fail.cpp /trunk/libs/config/test/has_nl_types_h_pass.cpp /trunk/libs/config/test/has_nrvo_fail.cpp /trunk/libs/config/test/has_nrvo_pass.cpp /trunk/libs/config/test/has_part_alloc_fail.cpp /trunk/libs/config/test/has_part_alloc_pass.cpp /trunk/libs/config/test/has_pthread_delay_np_fail.cpp /trunk/libs/config/test/has_pthread_delay_np_pass.cpp /trunk/libs/config/test/has_pthread_ma_st_fail.cpp /trunk/libs/config/test/has_pthread_ma_st_pass.cpp /trunk/libs/config/test/has_pthread_yield_fail.cpp /trunk/libs/config/test/has_pthread_yield_pass.cpp /trunk/libs/config/test/has_pthreads_fail.cpp /trunk/libs/config/test/has_pthreads_pass.cpp /trunk/libs/config/test/has_rvalue_refs_fail.cpp /trunk/libs/config/test/has_rvalue_refs_pass.cpp /trunk/libs/config/test/has_sched_yield_fail.cpp /trunk/libs/config/test/has_sched_yield_pass.cpp /trunk/libs/config/test/has_sgi_type_traits_fail.cpp /trunk/libs/config/test/has_sgi_type_traits_pass.cpp /trunk/libs/config/test/has_sigaction_fail.cpp /trunk/libs/config/test/has_sigaction_pass.cpp /trunk/libs/config/test/has_slist_fail.cpp /trunk/libs/config/test/has_slist_pass.cpp /trunk/libs/config/test/has_static_assert_fail.cpp /trunk/libs/config/test/has_static_assert_pass.cpp /trunk/libs/config/test/has_stdint_h_fail.cpp /trunk/libs/config/test/has_stdint_h_pass.cpp /trunk/libs/config/test/has_stlp_use_facet_fail.cpp /trunk/libs/config/test/has_stlp_use_facet_pass.cpp /trunk/libs/config/test/has_tr1_array_fail.cpp /trunk/libs/config/test/has_tr1_array_pass.cpp /trunk/libs/config/test/has_tr1_bind_fail.cpp /trunk/libs/config/test/has_tr1_bind_pass.cpp /trunk/libs/config/test/has_tr1_complex_over_fail.cpp /trunk/libs/config/test/has_tr1_complex_over_pass.cpp /trunk/libs/config/test/has_tr1_complex_trig_fail.cpp /trunk/libs/config/test/has_tr1_complex_trig_pass.cpp /trunk/libs/config/test/has_tr1_function_fail.cpp /trunk/libs/config/test/has_tr1_function_pass.cpp /trunk/libs/config/test/has_tr1_hash_fail.cpp /trunk/libs/config/test/has_tr1_hash_pass.cpp /trunk/libs/config/test/has_tr1_mem_fn_fail.cpp /trunk/libs/config/test/has_tr1_mem_fn_pass.cpp /trunk/libs/config/test/has_tr1_random_fail.cpp /trunk/libs/config/test/has_tr1_random_pass.cpp /trunk/libs/config/test/has_tr1_ref_wrap_fail.cpp /trunk/libs/config/test/has_tr1_ref_wrap_pass.cpp /trunk/libs/config/test/has_tr1_regex_fail.cpp /trunk/libs/config/test/has_tr1_regex_pass.cpp /trunk/libs/config/test/has_tr1_result_of_fail.cpp /trunk/libs/config/test/has_tr1_result_of_pass.cpp /trunk/libs/config/test/has_tr1_shared_ptr_fail.cpp /trunk/libs/config/test/has_tr1_shared_ptr_pass.cpp /trunk/libs/config/test/has_tr1_tuple_fail.cpp /trunk/libs/config/test/has_tr1_tuple_pass.cpp /trunk/libs/config/test/has_tr1_type_traits_fail.cpp /trunk/libs/config/test/has_tr1_type_traits_pass.cpp /trunk/libs/config/test/has_tr1_unordered_map_fail.cpp /trunk/libs/config/test/has_tr1_unordered_map_pass.cpp /trunk/libs/config/test/has_tr1_unordered_set_fail.cpp /trunk/libs/config/test/has_tr1_unordered_set_pass.cpp /trunk/libs/config/test/has_tr1_utility_fail.cpp /trunk/libs/config/test/has_tr1_utility_pass.cpp /trunk/libs/config/test/has_unistd_h_fail.cpp /trunk/libs/config/test/has_unistd_h_pass.cpp /trunk/libs/config/test/has_variadic_tmpl_fail.cpp /trunk/libs/config/test/has_variadic_tmpl_pass.cpp /trunk/libs/config/test/has_vc6_mem_templ_fail.cpp /trunk/libs/config/test/has_vc6_mem_templ_pass.cpp /trunk/libs/config/test/has_vc_iterator_fail.cpp /trunk/libs/config/test/has_vc_iterator_pass.cpp /trunk/libs/config/test/has_winthreads_fail.cpp /trunk/libs/config/test/has_winthreads_pass.cpp /trunk/libs/config/test/limits_test.cpp /trunk/libs/config/test/math_info.cpp /trunk/libs/config/test/no_adl_barrier_fail.cpp /trunk/libs/config/test/no_adl_barrier_pass.cpp /trunk/libs/config/test/no_arg_dep_lookup_fail.cpp /trunk/libs/config/test/no_arg_dep_lookup_pass.cpp /trunk/libs/config/test/no_array_type_spec_fail.cpp /trunk/libs/config/test/no_array_type_spec_pass.cpp /trunk/libs/config/test/no_auto_ptr_fail.cpp /trunk/libs/config/test/no_auto_ptr_pass.cpp /trunk/libs/config/test/no_bcb_partial_spec_fail.cpp /trunk/libs/config/test/no_bcb_partial_spec_pass.cpp /trunk/libs/config/test/no_ctype_functions_fail.cpp /trunk/libs/config/test/no_ctype_functions_pass.cpp /trunk/libs/config/test/no_cv_spec_fail.cpp /trunk/libs/config/test/no_cv_spec_pass.cpp /trunk/libs/config/test/no_cv_void_spec_fail.cpp /trunk/libs/config/test/no_cv_void_spec_pass.cpp /trunk/libs/config/test/no_cwchar_fail.cpp /trunk/libs/config/test/no_cwchar_pass.cpp /trunk/libs/config/test/no_cwctype_fail.cpp /trunk/libs/config/test/no_cwctype_pass.cpp /trunk/libs/config/test/no_ded_typename_fail.cpp /trunk/libs/config/test/no_ded_typename_pass.cpp /trunk/libs/config/test/no_dep_nested_class_fail.cpp /trunk/libs/config/test/no_dep_nested_class_pass.cpp /trunk/libs/config/test/no_dep_val_param_fail.cpp /trunk/libs/config/test/no_dep_val_param_pass.cpp /trunk/libs/config/test/no_excep_std_fail.cpp /trunk/libs/config/test/no_excep_std_pass.cpp /trunk/libs/config/test/no_exceptions_fail.cpp /trunk/libs/config/test/no_exceptions_pass.cpp /trunk/libs/config/test/no_exp_func_tem_arg_fail.cpp /trunk/libs/config/test/no_exp_func_tem_arg_pass.cpp /trunk/libs/config/test/no_func_tmp_order_fail.cpp /trunk/libs/config/test/no_func_tmp_order_pass.cpp /trunk/libs/config/test/no_function_type_spec_fail.cpp /trunk/libs/config/test/no_function_type_spec_pass.cpp /trunk/libs/config/test/no_i64_limits_fail.cpp /trunk/libs/config/test/no_i64_limits_pass.cpp /trunk/libs/config/test/no_inline_memb_init_fail.cpp /trunk/libs/config/test/no_inline_memb_init_pass.cpp /trunk/libs/config/test/no_integral_int64_t_fail.cpp /trunk/libs/config/test/no_integral_int64_t_pass.cpp /trunk/libs/config/test/no_iosfwd_fail.cpp /trunk/libs/config/test/no_iosfwd_pass.cpp /trunk/libs/config/test/no_iostream_fail.cpp /trunk/libs/config/test/no_iostream_pass.cpp /trunk/libs/config/test/no_is_abstract_fail.cpp /trunk/libs/config/test/no_is_abstract_pass.cpp /trunk/libs/config/test/no_iter_construct_fail.cpp /trunk/libs/config/test/no_iter_construct_pass.cpp /trunk/libs/config/test/no_limits_const_exp_fail.cpp /trunk/libs/config/test/no_limits_const_exp_pass.cpp /trunk/libs/config/test/no_limits_fail.cpp /trunk/libs/config/test/no_limits_pass.cpp /trunk/libs/config/test/no_ll_limits_fail.cpp /trunk/libs/config/test/no_ll_limits_pass.cpp /trunk/libs/config/test/no_mem_func_spec_fail.cpp /trunk/libs/config/test/no_mem_func_spec_pass.cpp /trunk/libs/config/test/no_mem_tem_keyword_fail.cpp /trunk/libs/config/test/no_mem_tem_keyword_pass.cpp /trunk/libs/config/test/no_mem_tem_pnts_fail.cpp /trunk/libs/config/test/no_mem_tem_pnts_pass.cpp /trunk/libs/config/test/no_mem_templ_frnds_fail.cpp /trunk/libs/config/test/no_mem_templ_frnds_pass.cpp /trunk/libs/config/test/no_mem_templates_fail.cpp /trunk/libs/config/test/no_mem_templates_pass.cpp /trunk/libs/config/test/no_nested_friendship_fail.cpp /trunk/libs/config/test/no_nested_friendship_pass.cpp /trunk/libs/config/test/no_ops_in_namespace_fail.cpp /trunk/libs/config/test/no_ops_in_namespace_pass.cpp /trunk/libs/config/test/no_part_spec_def_args_fail.cpp /trunk/libs/config/test/no_part_spec_def_args_pass.cpp /trunk/libs/config/test/no_partial_spec_fail.cpp /trunk/libs/config/test/no_partial_spec_pass.cpp /trunk/libs/config/test/no_priv_aggregate_fail.cpp /trunk/libs/config/test/no_priv_aggregate_pass.cpp /trunk/libs/config/test/no_ptr_mem_const_fail.cpp /trunk/libs/config/test/no_ptr_mem_const_pass.cpp /trunk/libs/config/test/no_ret_det_fail.cpp /trunk/libs/config/test/no_ret_det_pass.cpp /trunk/libs/config/test/no_rtti_fail.cpp /trunk/libs/config/test/no_rtti_pass.cpp /trunk/libs/config/test/no_sfinae_fail.cpp /trunk/libs/config/test/no_sfinae_pass.cpp /trunk/libs/config/test/no_sstream_fail.cpp /trunk/libs/config/test/no_sstream_pass.cpp /trunk/libs/config/test/no_std_allocator_fail.cpp /trunk/libs/config/test/no_std_allocator_pass.cpp /trunk/libs/config/test/no_std_distance_fail.cpp /trunk/libs/config/test/no_std_distance_pass.cpp /trunk/libs/config/test/no_std_iter_traits_fail.cpp /trunk/libs/config/test/no_std_iter_traits_pass.cpp /trunk/libs/config/test/no_std_iterator_fail.cpp /trunk/libs/config/test/no_std_iterator_pass.cpp /trunk/libs/config/test/no_std_locale_fail.cpp /trunk/libs/config/test/no_std_locale_pass.cpp /trunk/libs/config/test/no_std_messages_fail.cpp /trunk/libs/config/test/no_std_messages_pass.cpp /trunk/libs/config/test/no_std_min_max_fail.cpp /trunk/libs/config/test/no_std_min_max_pass.cpp /trunk/libs/config/test/no_std_oi_assign_fail.cpp /trunk/libs/config/test/no_std_oi_assign_pass.cpp /trunk/libs/config/test/no_std_typeinfo_fail.cpp /trunk/libs/config/test/no_std_typeinfo_pass.cpp /trunk/libs/config/test/no_std_use_facet_fail.cpp /trunk/libs/config/test/no_std_use_facet_pass.cpp /trunk/libs/config/test/no_std_wstreambuf_fail.cpp /trunk/libs/config/test/no_std_wstreambuf_pass.cpp /trunk/libs/config/test/no_std_wstring_fail.cpp /trunk/libs/config/test/no_std_wstring_pass.cpp /trunk/libs/config/test/no_stdc_namespace_fail.cpp /trunk/libs/config/test/no_stdc_namespace_pass.cpp /trunk/libs/config/test/no_swprintf_fail.cpp /trunk/libs/config/test/no_swprintf_pass.cpp /trunk/libs/config/test/no_template_streams_fail.cpp /trunk/libs/config/test/no_template_streams_pass.cpp /trunk/libs/config/test/no_template_template_fail.cpp /trunk/libs/config/test/no_template_template_pass.cpp /trunk/libs/config/test/no_two_phase_lookup_fail.cpp /trunk/libs/config/test/no_two_phase_lookup_pass.cpp /trunk/libs/config/test/no_typeid_fail.cpp /trunk/libs/config/test/no_typeid_pass.cpp /trunk/libs/config/test/no_typename_with_ctor_fail.cpp /trunk/libs/config/test/no_typename_with_ctor_pass.cpp /trunk/libs/config/test/no_using_breaks_adl_fail.cpp /trunk/libs/config/test/no_using_breaks_adl_pass.cpp /trunk/libs/config/test/no_using_decl_overld_fail.cpp /trunk/libs/config/test/no_using_decl_overld_pass.cpp /trunk/libs/config/test/no_using_template_fail.cpp /trunk/libs/config/test/no_using_template_pass.cpp /trunk/libs/config/test/no_void_returns_fail.cpp /trunk/libs/config/test/no_void_returns_pass.cpp /trunk/libs/config/test/no_wchar_t_fail.cpp /trunk/libs/config/test/no_wchar_t_pass.cpp /trunk/libs/config/test/test.hpp /trunk/libs/config/test/threads/test_thread_fail1.cpp /trunk/libs/config/test/threads/test_thread_fail2.cpp /trunk/libs/exception/doc/copy_exception.html /trunk/libs/exception/doc/current_exception.html /trunk/libs/exception/doc/exception_ptr.html /trunk/libs/exception/doc/rethrow_exception.html /trunk/libs/exception/test/Jamfile.v2 /trunk/libs/exception/test/copy_exception_test.cpp /trunk/libs/exception/test/errinfos_test.cpp /trunk/libs/exception/test/error_info_test.cpp /trunk/libs/exception/test/is_output_streamable_test.cpp ======================================= --- /dev/null +++ /trunk/libs/array/test/Jamfile.v2 Fri May 28 00:05:44 2010 @@ -0,0 +1,14 @@ +#~ Copyright Rene Rivera 2008 +#~ Distributed under the Boost Software License, Version 1.0.+#~ (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ +import testing ; + +test-suite array : + [ run array0.cpp ] + [ run array1.cpp ] + [ run array2.cpp ] + [ run array3.cpp ] + [ run array4.cpp ] + [ run array5.cpp ] + ; ======================================= --- /dev/null +++ /trunk/libs/array/test/array0.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,107 @@ +/* tests for using class array<> specialization for size 0 + * (C) Copyright Alisdair Meredith 2006. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#include <string> +#include <iostream> +#include <boost/array.hpp> + +namespace { +unsigned int failed_tests = 0; + +void fail_test( const char * reason ) { + ++failed_tests;+ std::cerr << "Test failure " << failed_tests << ": " << reason << std::endl;
+} + +template< class T > +void BadValue( const T & ) +{ + fail_test( "Unexpected value" ); +} + +template< class T > +void RunTests() +{ + typedef boost::array< T, 0 > test_type; + + // Test value and aggegrate initialization + test_type test_case = {}; + const boost::array< T, 0 > const_test_case = test_type(); + + test_case.fill ( T() ); ++ // front/back and operator[] must compile, but calling them is undefined + // Likewise, all tests below should evaluate to false, avoiding undefined behaviour
+ if( !test_case.empty() ) { + BadValue( test_case.front() ); + } + + if( !const_test_case.empty() ) { + BadValue( const_test_case.back() ); + } + + if( test_case.size() > 0 ) { + BadValue( test_case[ 0 ] ); + } + + if( const_test_case.max_size() > 0 ) { + BadValue( const_test_case[ 0 ] ); + } + + // Assert requirements of TR1 6.2.2.4 + if( test_case.begin() != test_case.end() ) { + fail_test( "Not an empty range" ); + } + if( const_test_case.begin() != const_test_case.end() ) { + fail_test( "Not an empty range" ); + } + + if( test_case.begin() == const_test_case.begin() ) { + fail_test( "iterators for different containers are not distinct" ); + } + + if( test_case.data() == const_test_case.data() ) {+ // Value of data is unspecified in TR1, so no requirement this test pass or fail
+ // However, it must compile! + } + + + // Check can safely use all iterator types with std algorithms + std::for_each( test_case.begin(), test_case.end(), BadValue< T > ); + std::for_each( test_case.rbegin(), test_case.rend(), BadValue< T > );+ std::for_each( const_test_case.begin(), const_test_case.end(), BadValue< T > ); + std::for_each( const_test_case.rbegin(), const_test_case.rend(), BadValue< T > );
+ + // Check swap is well formed + std::swap( test_case, test_case ); + + // Check assigment operator and overloads are well formed + test_case = const_test_case; + + // Confirm at() throws the std lib defined exception + try { + BadValue( test_case.at( 0 ) ); + } catch ( const std::out_of_range & ) { + } + + try { + BadValue( const_test_case.at( 0 ) ); + } catch ( const std::out_of_range & ) { + } +} + +} + +int main() +{ + RunTests< bool >(); + RunTests< void * >(); + RunTests< long double >(); + RunTests< std::string >(); + return failed_tests; +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/array1.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,58 @@ +/* simple example for using class array<> + * + * (C) Copyright Nicolai M. Josuttis 2001. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + * + * Changelog: + * 20 Jan 2001 - Removed boolalpha use since stock GCC doesn't support it + * (David Abrahams) + */ + +#include <iostream> +#include <boost/array.hpp> + +int main() +{ + // define special type name + typedef boost::array<float,6> Array; + + // create and initialize an array + Array a = { { 42 } }; + + // access elements + for (unsigned i=1; i<a.size(); ++i) { + a[i] = a[i-1]+1; + } + + // use some common STL container operations + std::cout << "size: " << a.size() << std::endl;+ std::cout << "empty: " << (a.empty() ? "true" : "false") << std::endl;
+ std::cout << "max_size: " << a.max_size() << std::endl; + std::cout << "front: " << a.front() << std::endl; + std::cout << "back: " << a.back() << std::endl; + std::cout << "elems: "; + + // iterate through all elements + for (Array::const_iterator pos=a.begin(); pos<a.end(); ++pos) { + std::cout << *pos << ' '; + } + std::cout << std::endl; + + // check copy constructor and assignment operator + Array b(a); + Array c; + c = a; + if (a==b && a==c) { + std::cout << "copy construction and copy assignment are OK" + << std::endl; + } + else { + std::cout << "copy construction and copy assignment FAILED" + << std::endl; + } + + return 0; // makes Visual-C++ compiler happy +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/array2.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,40 @@ +/* example for using class array<> + * (C) Copyright Nicolai M. Josuttis 2001. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#include <algorithm> +#include <functional> +#include <boost/array.hpp> +#include "print.hpp" +using namespace std; +using namespace boost; + +int main() +{ + // create and initialize array + array<int,10> a = { { 1, 2, 3, 4, 5 } }; + + print_elements(a); + + // modify elements directly + for (unsigned i=0; i<a.size(); ++i) { + ++a[i]; + } + print_elements(a); + + // change order using an STL algorithm + reverse(a.begin(),a.end()); + print_elements(a); + + // negate elements using STL framework + transform(a.begin(),a.end(), // source + a.begin(), // destination + negate<int>()); // operation + print_elements(a); + + return 0; // makes Visual-C++ compiler happy +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/array3.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,55 @@ +/* example for using class array<> + * (C) Copyright Nicolai M. Josuttis 2001. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#include <string> +#include <iostream> +#include <boost/array.hpp> + +template <class T> +void print_elements (const T& x); + +int main() +{ + // create array of four seasons + boost::array<std::string,4> seasons = { + { "spring", "summer", "autumn", "winter" } + }; + + // copy and change order + boost::array<std::string,4> seasons_orig = seasons; + for (std::size_t i=seasons.size()-1; i>0; --i) { + std::swap(seasons.at(i),seasons.at((i+1)%seasons.size())); + } + + std::cout << "one way: "; + print_elements(seasons); + + // try swap() + std::cout << "other way: "; + std::swap(seasons,seasons_orig); + print_elements(seasons); + + // try reverse iterators + std::cout << "reverse: "; + for (boost::array<std::string,4>::reverse_iterator pos + =seasons.rbegin(); pos<seasons.rend(); ++pos) { + std::cout << " " << *pos; + } + std::cout << std::endl; + + return 0; // makes Visual-C++ compiler happy +} + +template <class T> +void print_elements (const T& x) +{ + for (unsigned i=0; i<x.size(); ++i) { + std::cout << " " << x[i]; + } + std::cout << std::endl; +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/array4.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,43 @@ +/* example for using class array<> + * (C) Copyright Nicolai M. Josuttis 2001. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#include <algorithm> +#include <functional> +#include <string> +#include <iostream> +#include <boost/array.hpp> + +int main() +{ + // array of arrays of seasons + boost::array<boost::array<std::string,4>,2> seasons_i18n = { + { { { "spring", "summer", "autumn", "winter", } }, + { { "Fruehling", "Sommer", "Herbst", "Winter" } } + } + }; + + // for any array of seasons print seasons + for (unsigned i=0; i<seasons_i18n.size(); ++i) { + boost::array<std::string,4> seasons = seasons_i18n[i]; + for (unsigned j=0; j<seasons.size(); ++j) { + std::cout << seasons[j] << " "; + } + std::cout << std::endl; + } + + // print first element of first array + std::cout << "first element of first array: " + << seasons_i18n[0][0] << std::endl; + + // print last element of last array + std::cout << "last element of last array: "+ << seasons_i18n[seasons_i18n.size()-1][seasons_i18n[0].size()-1]
+ << std::endl; + + return 0; // makes Visual-C++ compiler happy +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/array5.cpp Fri May 28 00:05:44 2010 @@ -0,0 +1,72 @@ +/* simple example for using class array<> + * (C) Copyright Nicolai M. Josuttis 2001. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ + +#include <iostream> +#include <boost/array.hpp> + +template <typename T> +void test_static_size (const T& cont) +{ + int tmp[T::static_size]; + for (unsigned i=0; i<T::static_size; ++i) { + tmp[i] = int(cont[i]); + } + for (unsigned j=0; j<T::static_size; ++j) { + std::cout << tmp[j] << ' '; + } + std::cout << std::endl; +} + +int main() +{ + // define special type name + typedef boost::array<float,6> Array; + + // create and initialize an array + const Array a = { { 42.42f } }; + + // use some common STL container operations + std::cout << "static_size: " << a.size() << std::endl; + std::cout << "size: " << a.size() << std::endl; + // Can't use std::boolalpha because it isn't portable+ std::cout << "empty: " << (a.empty()? "true" : "false") << std::endl;
+ std::cout << "max_size: " << a.max_size() << std::endl; + std::cout << "front: " << a.front() << std::endl; + std::cout << "back: " << a.back() << std::endl; + std::cout << "[0]: " << a[0] << std::endl; + std::cout << "elems: "; + + // iterate through all elements + for (Array::const_iterator pos=a.begin(); pos<a.end(); ++pos) { + std::cout << *pos << ' '; + } + std::cout << std::endl; + test_static_size(a); + + // check copy constructor and assignment operator + Array b(a); + Array c; + c = a; + if (a==b && a==c) { + std::cout << "copy construction and copy assignment are OK" + << std::endl; + } + else { + std::cout << "copy construction and copy assignment are BROKEN" + << std::endl; + } + + typedef boost::array<double,6> DArray; + typedef boost::array<int,6> IArray;+ IArray ia = { { 1, 2, 3, 4, 5, 6 } } ; // extra braces silence GCC warning
+ DArray da; + da = ia; + da.assign(42); + + return 0; // makes Visual-C++ compiler happy +} + ======================================= --- /dev/null +++ /trunk/libs/array/test/print.hpp Fri May 28 00:05:44 2010 @@ -0,0 +1,27 @@ +/* The following code example is taken from the book + * "The C++ Standard Library - A Tutorial and Reference" + * by Nicolai M. Josuttis, Addison-Wesley, 1999 + * + * (C) Copyright Nicolai M. Josuttis 1999. + * Distributed under the Boost Software License, Version 1.0. (See + * accompanying file LICENSE_1_0.txt or copy at + * http://www.boost.org/LICENSE_1_0.txt) + */ +#include <iostream> + +/* print_elements() + * - prints optional C-string optcstr followed by + * - all elements of the collection coll + * - separated by spaces + */ +template <class T> +inline void print_elements (const T& coll, const char* optcstr="") +{ + typename T::const_iterator pos; + + std::cout << optcstr; + for (pos=coll.begin(); pos!=coll.end(); ++pos) { + std::cout << *pos << ' '; + } + std::cout << std::endl; +} ======================================= --- /dev/null +++ /trunk/libs/config/doc/Jamfile.v2 Fri May 28 00:05:44 2010 @@ -0,0 +1,64 @@ +# Boost.Config +# +# Copyright (c) 2001 Beman Dawes +# Copyright (c) 2001 Vesa Karvonen +# Copyright (c) 2001 John Maddock +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + + +# Quickbook+# -----------------------------------------------------------------------------
+ +import quickbook ; + +path-constant boost-images : ../../../doc/src/images ; + +xml config + : + config.qbk + ; + +boostbook standalone + : + config + : + <xsl:param>toc.max.depth=2 + <xsl:param>toc.section.depth=2 + <xsl:param>chunk.section.depth=1 + <xsl:param>boost.root=../../../.. + <xsl:param>boost.libraries=../../../../libs/libraries.htm + <xsl:param>navig.graphics=1 + <xsl:param>html.stylesheet=../../../../doc/html/boostbook.css + + # PDF Options: + <format>pdf:<xsl:param>xep.extensions=1+ # TOC generation: this is needed for FOP 0.2, but must not be set to zero for FOP-0.9!
+ <format>pdf:<xsl:param>fop.extensions=0 + <format>pdf:<xsl:param>fop1.extensions=0 + # No indent on body text: + <format>pdf:<xsl:param>body.start.indent=0pt + # Margin size: + <format>pdf:<xsl:param>page.margin.inner=0.5in + # Margin size: + <format>pdf:<xsl:param>page.margin.outer=0.5in + # Paper type = A4 + <format>pdf:<xsl:param>paper.type=A4 + # Yes, we want graphics for admonishments: + <xsl:param>admon.graphics=1 + # Set this one for PDF generation *only*: + # default pnd graphics are awful in PDF form, + # better use SVG's instead: + <format>pdf:<xsl:param>admon.graphics.extension=".svg" + <format>pdf:<xsl:param>use.role.for.mediaobject=1 + <format>pdf:<xsl:param>preferred.mediaobject.role=print + <format>pdf:<xsl:param>admon.graphics.path=$(boost-images)/+ <format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/config/doc/html
+ ; + + +install pdf-install : standalone : <location>. <install-type>PDF ; + + ======================================= --- /dev/null +++ /trunk/libs/config/doc/acknowledgements.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,32 @@ +[/ + Boost.Config + + Copyright (c) 2001 Beman Dawes + Copyright (c) 2001 Vesa Karvonen + Copyright (c) 2001 John Maddock + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +] + +[section Acknowledgements] + +Beman Dawes provided the original `config.hpp` and part of this document. + +Vesa Karvonen provided a description of the principles (see+[link boost_config.rationale rationale]) and put together an early version of
+the current configuration setup. + +John Maddock put together the configuration current code, the test +programs, the configuration script and the reference section of this +document. + +Matias Capeletto converted the docs to quickbook format. + +Numerous boost members, past and present, have contributed fixes to boost's +configuration. + +[endsect] + + ======================================= --- /dev/null +++ /trunk/libs/config/doc/config.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,60 @@ +[article Boost.Config + [quickbook 1.4] + [authors [Beman Dawes, Vesa Karvonen, John Maddock] ] + [copyright 2001-2007 Beman Dawes, Vesa Karvonen, John Maddock] + [category broken compiler workarounds] + [id config] + [dirname config] + [purpose+ Helps boost library developers adapt to compiler idiosyncrasies; not intended for library users.
+ ] + [source-mode c++] + [license +Distributed under the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at +[@http://www.boost.org/LICENSE_1_0.txt]) + ] +] + + +[/ Cited Boost resources ] ++[def __BOOST_REGRESSION_TEST_DRIVER__ [@../../../../tools/regression/doc/index.html boost regression test driver]] +[def __BOOST_CONFIG_HEADER__ [@../../../../boost/config.hpp <boost/config.hpp>]] +[def __BOOST_CONFIG_USER_HEADER__ [@../../../../boost/config/user.hpp <boost/config/user.hpp>]] +[def __BOOST_CONFIG_SUFFIX_HEADER__ [@../../../../boost/config/user.hpp <boost/config/suffix.hpp>]]
+[def __BOOST_CONFIG_DIR__ ['<boost-root>]`/boost/config/`] + + +[/ Other web resources ] + +[def __STL_PORT__ [@http://stlport.sourceforge.net STLport]] +[def __BOOST_TRACKER__ [@https://svn.boost.org/trac/boost/newticket Trac]]+[def __CORE_LANGUAGE_DR337__ [@http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337 Core Language DR337]] +[def __PRINCIPLES_AND_PATTERNS_ARTICLE__ [@http://www.objectmentor.com/resources/articles/Principles_and_Patterns.pdf following article]]
+ + +[/ Icons ] + +[def __NOTE__ [$images/note.png]] +[def __ALERT__ [$images/caution.png]] +[def __DETAIL__ [$images/note.png]] +[def __TIP__ [$images/tip.png]] +[def __QUESTION_MARK__ [$images/question.png]] +[def __SPACE__ [$images/space.png]] +[def __GO_TO__ [$images/callouts/R.png]] + + +[/ Document files ] + + +[include configuring_boost.qbk] +[include macro_reference.qbk] +[include guidelines.qbk] +[include rationale.qbk] +[include acknowledgements.qbk] + + + + + ======================================= --- /dev/null +++ /trunk/libs/config/doc/configuring_boost.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,434 @@ +[/ + Boost.Config + + Copyright (c) 2001 Beman Dawes + Copyright (c) 2001 Vesa Karvonen + Copyright (c) 2001 John Maddock + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +] + + +[section Configuring Boost for Your Platform] + + +[section Using the default boost configuration] + +Boost comes already configured for most common compilers and platforms; you +should be able to use boost "as is". Since the compiler is configured +separately from the standard library, the default configuration should work +even if you replace the compiler's standard library with a third-party +standard library (like __STL_PORT__). + +Using boost "as is" without trying to reconfigure is the recommended method +for using boost. You can, however, run the configure script if you want to, +and there are regression tests provided that allow you to test the current +boost configuration with your particular compiler setup. ++Boost library users can request support for additional compilers or platforms
+by visiting our __BOOST_TRACKER__ and submitting a support request. + +[endsect] + +[section The <boost/config.hpp> header] + +Boost library implementations access configuration macros via + + #include ``__BOOST_CONFIG_HEADER__`` ++While Boost library users are not required to include that file directly, or
+use those configuration macros, such use is acceptable. The configuration+macros are documented as to their purpose, usage, and limitations which makes
+them usable by both Boost library and user code. ++Boost [link config_info_macros informational] or [link config_helpers helper] +macros are designed for use by Boost users as well as for our own internal use.
+Note however, that the [link config_features feature test] and +[link config_defects defect test] macros were designed for internal use by +Boost libraries, not user code, so they can change at any time (though no +gratuitous changes are made to them). Boost library problems resulting from+changes to the configuration macros are caught by the Boost regression tests, +so the Boost libraries are updated to account for those changes. By contrast,
+Boost library user code can be adversely affected by changes to the macros+without warning. The best way to keep abreast of changes to the macros used in
+user code is to monitor the discussions on the Boost developers list. + +[endsect] + +[#config_config_script] + +[section Using the configure script] + +[important+This configure script only sets up the Boost headers for use with a particular
+compiler. It has no effect on Boost.Build, or how the libraries are built. +] ++If you know that boost is incorrectly configured for your particular setup, and +you are on a UNIX like platform, then you may want to try and improve things by +running the boost configure script. From a shell command prompt you will need to
+cd into ['<boost-root>]`/libs/config/` and type: + +[: `sh ./configure` ] + +you will see a list of the items being checked as the script works its way +through the regression tests. Note that the configure script only really +auto-detects your compiler if it's called g++, c++ or CC. If you are using +some other compiler you will need to set one or more of the following +environment variables: + + +[table +[[Variable][Description ]] +[[CXX ][The name of the compiler, for example `c++`. ]] +[[CXXFLAGS][The compiler flags to use, for example `-O2`. ]] +[[LDFLAGS ][The linker flags to use, for example `-L/mypath`. ]] +[[LIBS ][Any libraries to link in, for example `-lpthread`.]] +] ++For example to run the configure script with HP aCC, you might use something
+like: + + export CXX="aCC" + export CXXFLAGS="-Aa -DAportable -D__HPACC_THREAD_SAFE_RB_TREE \ + -DRWSTD_MULTI_THREAD -DRW_MULTI_THREAD -D_REENTRANT -D_THREAD_SAFE" + export LDFLAGS="-DAportable" + export LIBS="-lpthread" + sh ./configure + +However you run the configure script, when it finishes you will find a +new header -`user.hpp`- located in the ['<boost-root>]`/libs/config/` +directory. [*Note that configure does not install this header into your +boost include path by default]. This header contains all the options +generated by the configure script, plus a header-section that contains +the user settable options from the default version of +__BOOST_CONFIG_USER_HEADER__ (located under __BOOST_CONFIG_DIR__). +There are two ways you can use this header: ++* [*Option 1:] copy the header into __BOOST_CONFIG_DIR__ so that it replaces
+the default user.hpp provided by boost. This option allows only one +configure-generated setup; boost developers should avoid this option, +as it incurs the danger of accidentally committing a configure-modified +__BOOST_CONFIG_USER_HEADER__ to the cvs repository (something you will not +be thanked for!). ++* [*Option 2:] give the header a more memorable name, and place it somewhere
+convenient; then, define the macro `BOOST_USER_CONFIG` to point to it. For +example create a new sub-directory __BOOST_CONFIG_DIR__ `user/`, and copy +the header there; for example as `multithread-gcc-config.hpp`. Then, when +compiling add the command line option: +`-DBOOST_USER_CONFIG="<boost/config/user/multithread-gcc-config.hpp>"`, and +boost will use the new configuration header. This option allows you to +generate more than one configuration header, and to keep them separate +from the boost source - so that updates to the source do not interfere +with your configuration. + +[endsect] + +[#config_user_settable] + +[section User settable options] + +There are some configuration-options that represent user choices, rather +than compiler defects or platform specific options. These are listed in+`<boost/config/user.hpp>` and at the start of a configure-generated `user.hpp`
+header. You can define these on the command line, or by editing +`<boost/config/user.hpp>`, they are listed in the following table: + + + +[table + +[[Macro ][Description ]] + +[[`BOOST_USER_CONFIG`][ +When defined, it should point to the name of the user configuration file +to include prior to any boost configuration files. When not defined, +defaults to [@../../../../boost/config/user.hpp `<boost/config/user.hpp>`]. +]] +[[`BOOST_COMPILER_CONFIG`][ +When defined, it should point to the name of the compiler configuration +file to use. Defining this cuts out the compiler selection logic, and +eliminates the dependency on the header containing that logic. For +example if you are using gcc, then you could define BOOST_COMPILER_CONFIG+to [@../../../../boost/config/compiler/gcc.hpp `<boost/config/compiler/gcc.hpp>`].
+]] +[[`BOOST_STDLIB_CONFIG`][ +When defined, it should point to the name of the standard library +configuration file to use. Defining this cuts out the standard library +selection logic, and eliminates the dependency on the header containing +that logic. For example if you are using STLport, then you could define +`BOOST_STDLIB_CONFIG` to+[@../../../../boost/config/stdlib/stlport.hpp `<boost/config/stdlib/stlport.hpp>`].
+]] +[[`BOOST_PLATFORM_CONFIG`][ +When defined, it should point to the name of the platform configuration +file to use. Defining this cuts out the platform selection logic, and +eliminates the dependency on the header containing that logic. For example+if you are compiling on linux, then you could define `BOOST_PLATFORM_CONFIG` +to [@../../../../boost/config/platform/linux.hpp `<boost/config/platform/linux.hpp>`].
+]] +[[`BOOST_NO_COMPILER_CONFIG`][ +When defined, no compiler configuration file is selected or included, +define when the compiler is fully conformant with the standard, or where +the user header (see `BOOST_USER_CONFIG`), has had any options necessary +added to it, for example by an autoconf generated configure script. +]] +[[`BOOST_NO_STDLIB_CONFIG` ][+When defined, no standard library configuration file is selected or included,
+define when the standard library is fully conformant with the standard, or+where the user header (see `BOOST_USER_CONFIG`), has had any options necessary
+added to it, for example by an autoconf generated configure script. +]] +[[`BOOST_NO_PLATFORM_CONFIG` ][ +When defined, no platform configuration file is selected or included, +define when the platform is fully conformant with the standard (and has +no useful extra features), or where the user header (see+`BOOST_USER_CONFIG`), has had any options necessary added to it, for example
+by an autoconf generated configure script. +]] +[[`BOOST_NO_CONFIG` ][ +Equivalent to defining all of `BOOST_NO_COMPILER_CONFIG`, +`BOOST_NO_STDLIB_CONFIG` and `BOOST_NO_PLATFORM_CONFIG`. +]] +[[`BOOST_STRICT_CONFIG` ][ +The normal behavior for compiler versions that are newer than the last +known version, is to assume that they have all the same defects as the +last known version. By setting this define, then compiler versions that +are newer than the last known version are assumed to be fully conforming +with the standard. This is probably most useful for boost developers or+testers, and for those who want to use boost to test beta compiler versions.
+]] +[[`BOOST_ASSERT_CONFIG` ][ +When this flag is set, if the config finds anything unknown, then it will +stop with a #error rather than continue. Boost regression testers should +set this define, as should anyone who wants to quickly check whether boost +is supported on their platform. +]] +[[`BOOST_DISABLE_THREADS` ][ +When defined, disables threading support, even if the compiler in its +current translation mode supports multiple threads. +]] +[[`BOOST_DISABLE_WIN32` ][ +When defined, disables the use of Win32 specific API's, even when these+are available. Also has the effect of setting `BOOST_DISABLE_THREADS` unless
+`BOOST_HAS_PTHREADS` is set. This option may be set automatically by the +config system when it detects that the compiler is in "strict mode". +]] +[[`BOOST_DISABLE_ABI_HEADERS`][ +Stops boost headers from including any prefix/suffix headers that normally +control things like struct packing and alignment. +]] +[[`BOOST_ABI_PREFIX`][ +A prefix header to include in place of whatever boost.config would normally +select, any replacement should set up struct packing and alignment options +as required. +]] +[[`BOOST_ABI_SUFFIX` ][ +A suffix header to include in place of whatever boost.config would normally +select, any replacement should undo the effects of the prefix header. +]] +[[`BOOST_ALL_DYN_LINK`][+Forces all libraries that have separate source, to be linked as dll's rather
+than static libraries on Microsoft Windows (this macro is used to turn on +`__declspec(dllimport)` modifiers, so that the compiler knows which symbols +to look for in a dll rather than in a static library). +Note that there may be some libraries that can only be statically linked +(Boost.Test for example) and others which may only be dynamically linked +(Boost.Threads for example), in these cases this macro has no effect. +]] +[[`BOOST_`['WHATEVER]`_DYN_LINK`][+Forces library "whatever" to be linked as a dll rather than a static library +on Microsoft Windows: replace the ['WHATEVER] part of the macro name with the
+name of the library that you want to dynamically link to, for example use+`BOOST_DATE_TIME_DYN_LINK` or `BOOST_REGEX_DYN_LINK` etc (this macro is used
+to turn on `__declspec(dllimport)` modifiers, so that the compiler knows +which symbols to look for in a dll rather than in a static library). +Note that there may be some libraries that can only be statically linked +(Boost.Test for example) and others which may only be dynamically linked +(Boost.Threads for example), in these cases this macro is unsupported. +]] +[[`BOOST_ALL_NO_LIB`][ +Tells the config system not to automatically select which libraries to link +against. +Normally if a compiler supports #pragma lib, then the correct library build+variant will be automatically selected and linked against, simply by the act
+of including one of that library's headers. This macro turns that +feature off. +]] +[[`BOOST_`['WHATEVER]`_NO_LIB`][ +Tells the config system not to automatically select which library to link+against for library "whatever", replace ['WHATEVER] in the macro name with the +name of the library; for example `BOOST_DATE_TIME_NO_LIB` or `BOOST_REGEX_NO_LIB`. +Normally if a compiler supports `#pragma lib`, then the correct library build
+variant will be automatically selected and linked against, simply by the +act of including one of that library's headers. This macro turns that +feature off. +]] +[[`BOOST_LIB_DIAGNOSTIC`][ +Causes the auto-linking code to output diagnostic messages indicating the +name of the library that is selected for linking. +]] +[[`BOOST_LIB_TOOLSET`][ +Overrides the name of the toolset part of the name of library being linked +to; note if defined this must be defined to a quoted string literal, for +example "abc". +]] +] + +[endsect] + +[section Advanced configuration usage] + +By setting various macros on the compiler command line or by editing+__BOOST_CONFIG_USER_HEADER__, the boost configuration setup can be optimised
+in a variety of ways. + +Boost's configuration is structured so that the user-configuration is+included first (defaulting to __BOOST_CONFIG_USER_HEADER__ if `BOOST_USER_CONFIG`
+is not defined). This sets up any user-defined policies, and gives the +user-configuration a chance to influence what happens next. + +Next the compiler, standard library, and platform configuration files are +included. These are included via macros (`BOOST_COMPILER_CONFIG` etc,+[link config_user_settable see user settable macros]), and if the corresponding +macro is undefined then a separate header that detects which compiler/standard
+library/platform is in use is included in order to set these. The config +can be told to ignore these headers altogether if the corresponding +`BOOST_NO_XXX` macro is set (for example `BOOST_NO_COMPILER_CONFIG` to +disable including any compiler configuration file - +[link config_user_settable see user settable macros]). ++Finally the boost configuration header, includes __BOOST_CONFIG_SUFFIX_HEADER__; +this header contains any boiler plate configuration code - for example where one
+boost macro being set implies that another must be set also. + +The following usage examples represent just a few of the possibilities: + +[section Example 1, creating our own frozen configuration] ++Lets suppose that we're building boost with Visual C++ 6, and STLport 4.0. Lets +suppose also that we don't intend to update our compiler or standard library +any time soon. In order to avoid breaking dependencies when we update boost,
+we may want to "freeze" our configuration headers, so that we only have to+rebuild our project if the boost code itself has changed, and not because the +boost config has been updated for more recent versions of Visual C++ or STLport.
+We'll start by realising that the configuration files in use are:+[@../../../../boost/config/compiler/visualc.hpp `<boost/config/compiler/visualc.hpp>`]
+for the compiler,+[@../../../../boost/config/stdlib/stlport.hpp `<boost/config/stdlib/stlport.hpp>`]
+for the standard library, and+[@../../../../boost/config/platform/win32.hpp `<boost/config/platform/win32.hpp>`] +for the platform. Next we'll create our own private configuration directory: +`boost/config/mysetup/`, and copy the configuration files into there. Finally,
+open up __BOOST_CONFIG_USER_HEADER__ and edit the following defines: + + #define BOOST_COMPILER_CONFIG "boost/config/mysetup/visualc.hpp" + #define BOOST_STDLIB_CONFIG "boost/config/mysetup/stlport.hpp" + #define BOOST_USER_CONFIG "boost/config/mysetup/win32.hpp" ++Now when you use boost, its configuration header will go straight to our "frozen" +versions, and ignore the default versions, you will now be insulated from any +configuration changes when you update boost. This technique is also useful if +you want to modify some of the boost configuration files; for example if you are
+working with a beta compiler release not yet supported by boost. + +[endsect] + +[section Example 2: skipping files that you don't need] ++Lets suppose that you're using boost with a compiler that is fully conformant with +the standard; you're not interested in the fact that older versions of your compiler +may have had bugs, because you know that your current version does not need any
+configuration macros setting. In a case like this, you can define+`BOOST_NO_COMPILER_CONFIG` either on the command line, or in __BOOST_CONFIG_USER_HEADER__, +and miss out the compiler configuration header altogether (actually you miss out +two headers, one which works out what the compiler is, and one that configures +boost for it). This has two consequences: the first is that less code has to be c +ompiled, and the second that you have removed a dependency on two boost headers.
+ +[endsect] ++[section Example 3: using configure script to freeze the boost configuration]
++If you are working on a unix-like platform then you can use the configure script to
+generate a "frozen" configuration based on your current compiler setup -+[link config_config_script see using the configure script for more details].
+ +[endsect] + +[endsect] + +[section Testing the boost configuration] ++The boost configuration library provides a full set of regression test programs
+under the __BOOST_CONFIG_DIR__ `test/` sub-directory: + + +[table +[[File][Description]] +[[`config_info.cpp`][+Prints out a detailed description of your compiler/standard library/platform +setup, plus your current boost configuration. The information provided by this +program useful in setting up the boost configuration files. If you report that +boost is incorrectly configured for your compiler/library/platform then please
+include the output from this program when reporting the changes required. +]] +[[`config_test.cpp`][ +A monolithic test program that includes most of the individual test cases.+This provides a quick check to see if boost is correctly configured for your
+compiler/library/platform. +]] +[[`limits_test.cpp`][+Tests your standard library's `std::numeric_limits` implementation (or its boost +provided replacement if `BOOST_NO_LIMITS` is defined). This test file fails with
+most versions of numeric_limits, mainly due to the way that some compilers +treat NAN's and infinity. +]] +[[`no_*pass.cpp`][ +Individual compiler defect test files. Each of these should compile, if one+does not then the corresponding `BOOST_NO_XXX` macro needs to be defined - see
+each test file for specific details. +]] +[[`no_*fail.cpp`][ +Individual compiler defect test files. Each of these should not compile, if+one does then the corresponding `BOOST_NO_XXX` macro is defined when it need
+not be - see each test file for specific details. +]] +[[`has_*pass.cpp`][ +Individual feature test files. If one of these does not compile then the +corresponding `BOOST_HAS_XXX` macro is defined when it should not be - see +each test file for specific details. +]] +[[`has_*fail.cpp`][ +Individual feature test files. If one of these does compile then the +corresponding `BOOST_HAS_XXX` macro can be safely defined - see each test +file for specific details. +]] +] + +Although you can run the configuration regression tests as individual test+files, there are rather a lot of them, so there are a couple of shortcuts to
+help you out: ++If you have built the __BOOST_REGRESSION_TEST_DRIVER__, then you can use this to +produce a nice html formatted report of the results using the supplied test file.
+ +Alternatively you can run the configure script like this: + +[: `./configure --enable-test`] + +in which case the script will test the current configuration rather than +creating a new one from scratch. + +If you are reporting the results of these tests for a new+platform/library/compiler then please include a log of the full compiler output,
+the output from `config_info.cpp`, and the pass/fail test results. + + +[endsect] + +[endsect] + ======================================= --- /dev/null +++ /trunk/libs/config/doc/guidelines.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,219 @@ +[/ + Boost.Config + + Copyright (c) 2001 Beman Dawes + Copyright (c) 2001 Vesa Karvonen + Copyright (c) 2001 John Maddock + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +] + + + +[section Guidelines for Boost Authors] ++The __BOOST_CONFIG_HEADER__ header is used to pass configuration information
+to other boost files, allowing them to cope with platform dependencies such +as arithmetic byte ordering, compiler pragmas, or compiler shortcomings.+Without such configuration information, many current compilers would not work
+with the Boost libraries. + +Centralizing configuration information in this header reduces the number of+files that must be modified when porting libraries to new platforms, or when +compilers are updated. Ideally, no other files would have to be modified when
+porting to a new platform. + +Configuration headers are controversial because some view them as condoning +broken compilers and encouraging non-standard subsets. Adding settings for+additional platforms and maintaining existing settings can also be a problem.
+In other words, configuration headers are a necessary evil rather than a +desirable feature. The boost config.hpp policy is designed to minimize the +problems and maximize the benefits of a configuration header. + +Note that: ++* Boost library implementers are not required to "`#include <boost/config.hpp>`",
+and are not required in any way to support compilers that do not comply +with the C++ Standard (ISO/IEC 14882). +* If a library implementer wishes to support some non-conforming compiler,+or to support some platform specific feature, "`#include <boost/config.hpp>`"
+is the preferred way to obtain configuration information not available from +the standard headers such as `<climits>`, etc. +* If configuration information can be deduced from standard headers such as +`<climits>`, use those standard headers rather than `<boost/config.hpp>`. +* Boost files that use macros defined in `<boost/config.hpp>` should have+sensible, standard conforming, default behavior if the macro is not defined. +This means that the starting point for porting `<boost/config.hpp>` to a new
+platform is simply to define nothing at all specific to that platform. In+the rare case where there is no sensible default behavior, an #error message
+should describe the problem.+* If a Boost library implementer wants something added to `config.hpp`, post
+a request on the Boost mailing list. There is no guarantee such a request +will be honored; the intent is to limit the complexity of config.hpp. +* The intent is to support only compilers which appear on their way to+becoming C++ Standard compliant, and only recent releases of those compilers
+at that.+* The intent is not to disable mainstream features now well-supported by the
+majority of compilers, such as namespaces, exceptions, RTTI, or templates. + + +[section:warnings Disabling Compiler Warnings] + +The header `<boost/config/warning_disable.hpp>` can be used to disable +certain compiler warings that are hard or impossible to otherwise remove. + +Note that: ++* This header [*['should never be included by another Boost header]], it should
+only ever be used by a library source file or a test case. +* The header should be included [*['before you include any other header]].+* This header only disables warnings that are hard or impossible to otherwise
+ deal with, and which are typically emitted by one compiler only, or + in one compilers own standard library headers. + +Currently it disables the following warnings: + +[table +[[Compiler][Warning]]+[[Visual C++ 8 and later][[@http://msdn2.microsoft.com/en-us/library/ttcz0bys(VS.80).aspx C4996]: Error 'function': was declared deprecated]]
+[[Intel C++][Warning 1786: relates to the use of "deprecated" standard + library functions rather like C4996 in Visual C++.]] +] + +[endsect] + + +[section Adding New Defect Macros] + +When you need to add a new defect macro - either to fix a problem with an +existing library, or when adding a new library - distil the issue down to+a simple test case; often, at this point other (possibly better) workarounds
+may become apparent. Secondly always post the test case code to the boost +mailing list and invite comments; remember that C++ is complex and that +sometimes what may appear a defect, may in fact turn out to be a problem +with the authors understanding of the standard. + +When you name the macro, follow the `BOOST_NO_`['SOMETHING] naming +convention, so that it's obvious that this is a macro reporting a defect. + +Finally, add the test program to the regression tests. You will need to+place the test case in a `.ipp` file with the following comments near the top:
+ + // MACRO: BOOST_NO_FOO + // TITLE: foo + // DESCRIPTION: If the compiler fails to support foo ++These comments are processed by the autoconf script, so make sure the format +follows the one given. The file should be named "`boost_no_foo.ipp`", where foo +is the defect description - try and keep the file name under the Mac 30 character
+filename limit though. You will also need to provide a function prototype+"`int test()`" that is declared in a namespace with the same name as the macro,
+but in all lower case, and which returns zero on success: + + + namespace boost_no_foo { + int test() + { + // test code goes here: + // + return 0; + } + + } ++Once the test code is in place in libs/config/test, updating the configuration
+test system proceeds as: + +* cd into `libs/config/tools` and run `bjam`. This generates the `.cpp` +file test cases from the `.ipp` file, updates the+libs/config/test/all/Jamfile.v2, `config_test.cpp` and `config_info.cpp`.[br][br]
++* cd into `libs/config/test/all` and run `bjam `['MACRONAME` compiler-list`], where +['MACRONAME] is the name of the new macro, and ['`compiler-list`] is a space separated list of
+compilers to test with.[br][br]+The xxx_pass_test and the xxx_fail_test [*should both report `**passed**`].[br][br] +If ['MACRONAME] is not defined when it should be defined, xxx_pass_test will not report `**passed**`. +If ['MACRONAME] is defined when it should not be defined, xxx_fail_test will not report `**passed**`.[br][br]
++* cd into `libs/config/test` and run `bjam config_info config_test `['`compiler-list`]. +`config_info` should build and run cleanly for all the compilers in ['`compiler-list`] +while `config_test` should fail for those that have the defect, and pass for those
+that do not. + +Then you should: + +* Define the defect macro in those config headers that require it.+* Document the macro in this documentation (please do not forget this step!!)
+* Commit everything.+* Keep an eye on the regression tests for new failures in Boost.Config caused by
+the addition. +* Start using the macro. + +[endsect] + +[section Adding New Feature Test Macros] ++When you need to add a macro that describes a feature that the standard does +not require, follow the convention for adding a new defect macro (above), but +call the macro `BOOST_HAS_FOO`, and name the test file "`boost_has_foo.ipp`".
+Try not to add feature test macros unnecessarily, if there is a platform+specific macro that can already be used (for example `_WIN32`, `__BEOS__`, or +`__linux`) to identify the feature then use that. Try to keep the macro to a
+feature group, or header name, rather than one specific API (for example +`BOOST_HAS_NL_TYPES_H` rather than `BOOST_HAS_CATOPEN`). If the macro +describes a POSIX feature group, then add boilerplate code to +__BOOST_CONFIG_SUFFIX_HEADER__ to auto-detect the feature where possible +(if you are wondering why we can't use POSIX feature test macro directly, +remember that many of these features can be added by third party libraries, +and are not therefore identified inside `<unistd.h>`). + +[endsect] + +[section Modifying the Boost Configuration Headers] ++The aim of boost's configuration setup is that the configuration headers should
+be relatively stable - a boost user should not have to recompile their code+just because the configuration for some compiler that they're not interested +in has changed. Separating the configuration into separate compiler/standard
+library/platform sections provides for part of this stability, but boost +authors require some amount of restraint as well, in particular: + +__BOOST_CONFIG_HEADER__ should never change, don't alter this file. ++__BOOST_CONFIG_USER_HEADER__ is included by default, don't add extra code to
+this file unless you have to. If you do, please remember to update +[@../../tools/configure.in libs/config/tools/configure.in] as well. + +__BOOST_CONFIG_SUFFIX_HEADER__ is always included so be careful about+modifying this file as it breaks dependencies for everyone. This file should
+include only "boilerplate" configuration code, and generally should change +only when new macros are added. ++[@../../../../boost/config/select_compiler_config.hpp <boost/config/select_compiler_config.hpp>], +[@../../../../boost/config/select_platform_config.hpp <boost/config/select_platform_config.hpp>] and +[@../../../../boost/config/select_stdlib_config.hpp <boost/config/select_stdlib_config.hpp>]
+are included by default and should change only if support for a new +compiler/standard library/platform is added. ++The compiler/platform/standard library selection code is set up so that unknown +platforms are ignored and assumed to be fully standards compliant - this gives +unknown platforms a "sporting chance" of working "as is" even without running
+the configure script. ++When adding or modifying the individual mini-configs, assume that future, as
+yet unreleased versions of compilers, have all the defects of the current+version. Although this is perhaps unnecessarily pessimistic, it cuts down on
+the maintenance of these files, and experience suggests that pessimism is +better placed than optimism here! + +[endsect] + +[endsect] + + + + + + ======================================= --- /dev/null +++ /trunk/libs/config/doc/macro_reference.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,987 @@ +[/ + Boost.Config + + Copyright (c) 2001 Beman Dawes + Copyright (c) 2001 Vesa Karvonen + Copyright (c) 2001 John Maddock + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +] + + + +[section Boost Macro Reference] + +[#config_defects] + +[section Macros that describe defects] ++The following macros all describe features that are required by the C++ standard, +if one of the following macros is defined, then it represents a defect in the
+compiler's conformance with the standard. + + +[table +[[Macro ][Section ][ Description ]] + + +[[`BOOST_BCB_PARTIAL_SPECIALIZATION_BUG`][Compiler][ +The compiler exibits certain partial specialisation bug - probably Borland +C++ Builder specific. +]] +[[`BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL`][Compiler][ +Argument dependent lookup fails if there is a using declaration for the +symbol being looked up in the current scope. For example, using +`boost::get_pointer`; prevents ADL from finding overloads of `get_pointer` +in namespaces nested inside boost (but not elsewhere). Probably +Borland specific. +]] +[[`BOOST_NO_ADL_BARRIER`][Compiler][ +The compiler locates and searches namespaces that it should /*not*/ in fact +search when performing argument dependent lookup. +]] +[[`BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP`][Compiler][ +Compiler does not implement argument-dependent lookup (also named +Koenig lookup); see std::3.4.2 \[basic.koenig.lookup\] +]] +[[`BOOST_NO_AUTO_PTR`][Standard library][ +If the compiler / library supplies non-standard or broken `std::auto_ptr`. +]] +[[`BOOST_NO_CTYPE_FUNCTIONS`][Platform][ +The Platform does not provide functions for the character-classifying +operations `<ctype.h>` and `<cctype>`, only macros. +]] +[[`BOOST_NO_CV_SPECIALIZATIONS`][Compiler][ +If template specialisations for cv-qualified types conflict with a +specialisation for a cv-unqualififed type. +]] +[[`BOOST_NO_CV_VOID_SPECIALIZATIONS`][Compiler][+If template specialisations for cv-void types conflict with a specialisation
+for void. +]] +[[`BOOST_NO_CWCHAR`][Platform][ +The Platform does not provide `<wchar.h>` and `<cwchar>`. +]] +[[`BOOST_NO_CWCTYPE`][Platform][ +The Platform does not provide `<wctype.h>` and `<cwctype>`. +]] +[[`BOOST_NO_DEPENDENT_NESTED_DERIVATIONS`][Compiler][+The compiler fails to compile a nested class that has a dependent base class:
+`` +template<typename T> +struct foo : { + template<typename U> + struct bar : public U {}; +`` +}; +]] +[[`BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS`][Compiler][ +Template value parameters cannot have a dependent type, for example: +`` +template<class T, typename T::type value> +class X { ... }; +`` +]] +[[`BOOST_NO_EXCEPTION_STD_NAMESPACE`][Standard Library][ +The standard library does not put some or all of the contents of +`<exception>` in namespace std. +]] +[[`BOOST_NO_EXCEPTIONS`][Compiler][ +The compiler does not support exception handling (this setting is typically +required by many C++ compilers for embedded platforms). Note that there is +no requirement for boost libraries to honor this configuration setting - +indeed doing so may be impossible in some cases. Those libraries that do +honor this will typically abort if a critical error occurs - you have been +warned! +]] +[[`BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS`][Compiler][ +Can only use deduced template arguments when calling function template +instantiations. +]] +[[`BOOST_NO_FUNCTION_TEMPLATE_ORDERING`][Compiler][ +The compiler does not perform function template ordering or its function +template ordering is incorrect. +`` +// #1 +template<class T> void f(T); + +// #2 +template<class T,class U> void f(T(*)(U)); + +void bar(int); + +f(&bar); // should choose #2. +`` +]] +[[`BOOST_NO_INCLASS_MEMBER_INITIALIZATION`][Compiler][ +Compiler violates std::9.4.2/4. +]] +[[`BOOST_NO_INTRINSIC_WCHAR_T`][Compiler][+The C++ implementation does not provide `wchar_t`, or it is really a synonym +for another integral type. Use this symbol to decide whether it is appropriate
+to explicitly specialize a template on `wchar_t` if there is already a +specialization for other integer types. +]] +[[`BOOST_NO_IOSFWD`][std lib][ +The standard library lacks `<iosfwd>`. +]] +[[`BOOST_NO_IOSTREAM`][std lib][ +The standard library lacks `<iostream>`, `<istream>` or `<ostream>`. +]] +[[`BOOST_NO_IS_ABSTRACT`][Compiler][+The C++ compiler does not support SFINAE with abstract types, this is covered +by __CORE_LANGUAGE_DR337__, but is not part of the current standard. Fortunately
+most compilers that support SFINAE also support this DR. +]] +[[`BOOST_NO_LIMITS`][Standard library][+The C++ implementation does not provide the `<limits>` header. Never check for
+this symbol in library code; always include `<boost/limits.hpp>`, which +guarantees to provide `std::numeric_limits`. +]] +[[`BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS`][Standard library][ +Constants such as `numeric_limits<T>::is_signed` are not available for use +at compile-time. +]] +[[`BOOST_NO_LONG_LONG_NUMERIC_LIMITS`][Standard library][ +There is no specialization for `numeric_limits<long long>` and+`numeric_limits<unsigned long long>`. `<boost/limits.hpp>` will then add these +specializations as a standard library "fix" only if the compiler supports the
+`long long` datatype. +]] +[[`BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS`][Compiler][ +The compiler does not support the specialization of individual member +functions of template classes. +]] +[[`BOOST_NO_MEMBER_TEMPLATE_KEYWORD`][Compiler][ +If the compiler supports member templates, but not the template keyword +when accessing member template classes. +]] +[[`BOOST_NO_MEMBER_TEMPLATE_FRIENDS`][Compiler][ +Member template friend syntax (`template<class P> friend class frd;`) +described in the C++ Standard, 14.5.3, not supported. +]] +[[`BOOST_NO_MEMBER_TEMPLATES`][Compiler][ +Member template functions not fully supported. +]] +[[`BOOST_NO_MS_INT64_NUMERIC_LIMITS`][Standard library][ +There is no specialization for `numeric_limits<__int64>` and+`numeric_limits<unsigned __int64>`. `<boost/limits.hpp>` will then add these
+specializations as a standard library "fix", only if the compiler supports +the `__int64` datatype. +]] +[[`BOOST_NO_NESTED_FRIENDSHIP`][Compiler][ +Compiler doesn't allow a nested class to access private members of its +containing class. Probably Borland/CodeGear specific. +]] +[[`BOOST_NO_OPERATORS_IN_NAMESPACE`][Compiler][ +Compiler requires inherited operator friend functions to be defined at +namespace scope, then using'ed to boost. Probably GCC specific. See +[@../../../../boost/operators.hpp `<boost/operators.hpp>`] for example. +]] +[[`BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS`][Compiler][ +The compiler does not correctly handle partial specializations +which depend upon default arguments in the primary template. +]] +[[`BOOST_NO_POINTER_TO_MEMBER_CONST`][Compiler][ +The compiler does not correctly handle pointers to const member functions, +preventing use of these in overloaded function templates. See +[@../../../../boost/functional.hpp `<boost/functional.hpp>`] for example. +]] +[[`BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS`][Compiler][ +Pointers to members don't work when used as template parameters. +]] +[[`BOOST_NO_PRIVATE_IN_AGGREGATE`][Compiler][ +The compiler misreads 8.5.1, treating classes as non-aggregate if they +contain private or protected member functions. +]] +[[`BOOST_NO_RTTI`][Compiler][+The compiler may (or may not) have the typeid operator, but RTTI on the dynamic type
+of an object is not supported. +]] +[[`BOOST_NO_SFINAE`][Compiler][ +The compiler does not support the "Substitution Failure Is Not An Error" +meta-programming idiom. +]] +[[`BOOST_NO_SFINAE_EXPR`][Compiler][ +The compiler does not support usage of SFINAE with arbitrary expressions. +]] +[[`BOOST_NO_STD_ALLOCATOR`][Standard library][ +The C++ standard library does not provide a standards conforming +`std::allocator`. +]] +[[`BOOST_NO_STD_DISTANCE`][Standard library][ +The platform does not have a conforming version of `std::distance`. +]] +[[`BOOST_NO_STD_ITERATOR`][Standard library][ +The C++ implementation fails to provide the `std::iterator` class. +]] +[[`BOOST_NO_STD_ITERATOR_TRAITS`][Standard library][ +The compiler does not provide a standard compliant implementation of +`std::iterator_traits`. Note that the compiler may still have a +non-standard implementation. +]] +[[`BOOST_NO_STD_LOCALE`][Standard library][ +The standard library lacks `std::locale`. +]] +[[`BOOST_NO_STD_MESSAGES`][Standard library][ +The standard library lacks a conforming `std::messages` facet. +]] +[[`BOOST_NO_STD_MIN_MAX`][Standard library][ +The C++ standard library does not provide the `min()` and `max()` template +functions that should be in `<algorithm>`. +]] +[[`BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN`][Standard library][ +Defined if the standard library's output iterators are not assignable. +]] +[[`BOOST_NO_STD_TYPEINFO`][Standard library][+The <typeinfo> header declares `type_info` in the global namespace instead of namespace std.
+]] +[[`BOOST_NO_STD_USE_FACET`][Standard library][ +The standard library lacks a conforming `std::use_facet`. +]] +[[`BOOST_NO_STD_WSTREAMBUF`][Standard library][ +The standard library's implementation of `std::basic_streambuf<wchar_t>` +is either missing, incomplete, or buggy. +]] +[[`BOOST_NO_STD_WSTRING`][Standard library][ +The standard library lacks `std::wstring`. +]] +[[`BOOST_NO_STDC_NAMESPACE`][Compiler, Platform][ +The contents of C++ standard headers for C library functions +(the `<c...>` headers) have not been placed in namespace std. This test is +difficult - some libraries "fake" the std C functions by adding using +declarations to import them into namespace std, unfortunately they don't +necessarily catch all of them... +]] +[[`BOOST_NO_STRINGSTREAM`][Standard library][ +The C++ implementation does not provide the `<sstream>` header. +]] +[[`BOOST_NO_SWPRINTF`][Platform][ +The platform does not have a conforming version of `swprintf`. +]] +[[`BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION`][Compiler][ +Class template partial specialization (14.5.4 \[temp.class.spec\]) not +supported. +]] +[[`BOOST_NO_TEMPLATED_IOSTREAMS`][Standard library][ +The standard library does not provide templated iostream classes. +]] +[[`BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS`][Standard library][ +The standard library does not provide templated iterator constructors +for its containers. +]] +[[`BOOST_NO_TEMPLATE_TEMPLATES`][Compiler][ +The compiler does not support template template parameters. +]] +[[`BOOST_NO_TYPEID`][Compiler][ +The compiler does not support the typeid operator at all. +]] +[[`BOOST_NO_TYPENAME_WITH_CTOR`][Compiler][ +The typename keyword cannot be used when creating a temporary of a +Dependent type. +]] +[[`BOOST_NO_UNREACHABLE_RETURN_DETECTION`][Compiler][ +If a return is unreachable, then no return statement should be required, +however some compilers insist on it, while other issue a bunch of warnings +if it is in fact present. +]] +[[`BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE`][Compiler][ +The compiler will not accept a using declaration that brings a function +from a typename used as a base class into a derived class if functions of +the same name are present in the derived class. +]] +[[`BOOST_NO_USING_TEMPLATE`][Compiler][ +The compiler will not accept a using declaration that imports a template +class or function from another namespace. Originally a Borland specific +problem with imports to/from the global namespace, extended to MSVC6 +which has a specific issue with importing template classes (but not +functions). +]] +[[`BOOST_NO_VOID_RETURNS`][Compiler][ +The compiler does not allow a void function to return the result of calling +another void function. +`` +void f() {} +void g() { return f(); } +`` +]] +] + +[endsect] + +[#config_features] + +[section Macros that describe optional features] + +The following macros describe features that are not required by the C++ +standard. The macro is only defined if the feature is present. + + +[table +[[Macro ][Section ][Description ]] + +[[`BOOST_HAS_BETHREADS`][Platform][ +The platform supports BeOS style threads. +]] +[[`BOOST_HAS_CLOCK_GETTIME`][Platform][ +The platform has the POSIX API `clock_gettime`. +]] +[[`BOOST_HAS_DECLSPEC`][Compiler][ +The compiler uses `__declspec(dllexport)` and `__declspec(dllimport)` to +export/import symbols from dll's. +]] +[[`BOOST_HAS_DIRENT_H`][Platform][ +The platform has the POSIX header `<dirent.h>`. +]] +[[`BOOST_HAS_EXPM1`][Platform][ +The platform has the functions `expm1`, `expm1f` and `expm1l` in `<math.h>` +]] +[[`BOOST_HAS_FTIME`][Platform][ +The platform has the Win32 API `GetSystemTimeAsFileTime`. +]] +[[`BOOST_HAS_GETTIMEOFDAY`][Platform][ +The platform has the POSIX API `gettimeofday`. +]] +[[`BOOST_HAS_HASH`][Standard library][ +The C++ implementation provides the (SGI) hash_set and hash_map classes.+When defined, `BOOST_HASH_SET_HEADER` and `BOOST_HASH_LIST_HEADER` will contain
+the names of the header needed to access hash_set and hash_map; +`BOOST_STD_EXTENSION_NAMESPACE` will provide the namespace in which the two +class templates reside. +]] +[[`BOOST_HAS_LOG1P`][Platform][+The platform has the functions `log1p`, `log1pf` and `log1pl` in `<math.h>`.
+]] +[[`BOOST_HAS_MACRO_USE_FACET`][Standard library][ +The standard library lacks a conforming `std::use_facet`, but has a macro +`_USE(loc, Type)` that does the job. This is primarily for the Dinkumware +std lib. +]] +[[`BOOST_HAS_MS_INT64`][Compiler][ +The compiler supports the `__int64` data type. +]] +[[`BOOST_HAS_NANOSLEEP`][Platform][ +The platform has the POSIX API nanosleep. +]] +[[`BOOST_HAS_NL_TYPES_H`][Platform][ +The platform has an `<nl_types.h>`. +]] +[[`BOOST_HAS_NRVO`][Compiler][ +Indicated that the compiler supports the named return value optimization +(NRVO). Used to select the most efficient implementation for some function. +See [@../../../../boost/operators.hpp `<boost/operators.hpp>`] for example. +]] +[[`BOOST_HAS_PARTIAL_STD_ALLOCATOR`][Standard Library][ +The standard library has a partially conforming `std::allocator` class, but +without any of the member templates. +]] +[[`BOOST_HAS_PTHREAD_DELAY_NP`][Platform][ +The platform has the POSIX API `pthread_delay_np`. +]] +[[`BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE`][Platform][ +The platform has the POSIX API `pthread_mutexattr_settype`. +]] +[[`BOOST_HAS_PTHREAD_YIELD`][Platform][ +The platform has the POSIX API `pthread_yield`. +]] +[[`BOOST_HAS_PTHREADS`][Platform][ +The platform support POSIX style threads. +]] +[[`BOOST_HAS_SCHED_YIELD`][Platform][ +The platform has the POSIX API `sched_yield`. +]] +[[`BOOST_HAS_SGI_TYPE_TRAITS`][Compiler, Standard library][ +The compiler has native support for SGI style type traits. +]] +[[`BOOST_HAS_STDINT_H`][Platform][ +The platform has a `<stdint.h>` +]] +[[`BOOST_HAS_SLIST`][Standard library][ +The C++ implementation provides the (SGI) slist class. When defined, +`BOOST_SLIST_HEADER` will contain the name of the header needed to access +`slist` and `BOOST_STD_EXTENSION_NAMESPACE` will provide the namespace in +which `slist` resides. +]] +[[`BOOST_HAS_STLP_USE_FACET`][Standard library][+The standard library lacks a conforming `std::use_facet`, but has a workaround
+class-version that does the job. This is primarily for the STLport std lib. +]] +[[`BOOST_HAS_TR1_ARRAY`][Standard library][ +The library has a TR1 conforming version of `<array>`. +]] +[[`BOOST_HAS_TR1_COMPLEX_OVERLOADS`][Standard library][+The library has a version of `<complex>` that supports passing scalars to the
+complex number algorithms. +]] +[[`BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG`][Standard library][ +The library has a version of `<complex>` that includes the new inverse trig +functions from TR1. +]] +[[`BOOST_HAS_TR1_REFERENCE_WRAPPER`][Standard library][ +The library has TR1 conforming reference wrappers in `<functional>`. +]] +[[`BOOST_HAS_TR1_RESULT_OF`][Standard library][ +The library has a TR1 conforming result_of template in `<functional>`. +]] +[[`BOOST_HAS_TR1_MEM_FN`][Standard library][+The library has a TR1 conforming mem_fn function template in `<functional>`.
+]] +[[`BOOST_HAS_TR1_BIND`][Standard library][ +The library has a TR1 conforming bind function template in `<functional>`. +]] +[[`BOOST_HAS_TR1_FUNCTION`][Standard library][ +The library has a TR1 conforming function class template in `<functional>`. +]] +[[`BOOST_HAS_TR1_HASH`][Standard library][ +The library has a TR1 conforming hash function template in `<functional>`. +]] +[[`BOOST_HAS_TR1_SHARED_PTR`][Standard library][ +The library has a TR1 conforming `shared_ptr` class template in `<memory>`. +]] +[[`BOOST_HAS_TR1_RANDOM`][Standard library][ +The library has a TR1 conforming version of `<random>`. +]] +[[`BOOST_HAS_TR1_REGEX`][Standard library][ +The library has a TR1 conforming version of `<regex>`. +]] +[[`BOOST_HAS_TR1_TUPLE`][Standard library][ +The library has a TR1 conforming version of `<tuple>`. +]] +[[`BOOST_HAS_TR1_TYPE_TRAITS`][Standard library][ +The library has a TR1 conforming version of `<type_traits>`. +]] +[[`BOOST_HAS_TR1_UTILITY`][Standard library][+The library has the TR1 additions to `<utility>` (tuple interface to `std::pair`).
+]] +[[`BOOST_HAS_TR1_UNORDERED_MAP`][Standard library][ +The library has a TR1 conforming version of `<unordered_map>`. +]] +[[`BOOST_HAS_TR1_UNORDERED_SET`][Standard library][ +The library has a TR1 conforming version of `<unordered_set>`. +]] +[[`BOOST_HAS_TR1`][Standard library][ +Implies all the other `BOOST_HAS_TR1_*` macros should be set. +]] +[[`BOOST_HAS_THREADS`][Platform, Compiler][ +Defined if the compiler, in its current translation mode, supports multiple +threads of execution. +]] +[[`BOOST_HAS_TWO_ARG_USE_FACET`][Standard library][ +The standard library lacks a conforming std::use_facet, but has a two +argument version that does the job. This is primarily for the Rogue Wave +std lib. +]] +[[`BOOST_HAS_UNISTD_H`][Platform][ +The Platform provides `<unistd.h>`. +]] +[[`BOOST_HAS_WINTHREADS`][Platform][ +The platform supports MS Windows style threads. +]] +[[`BOOST_MSVC_STD_ITERATOR`][Standard library][+Microsoft's broken version of `std::iterator` is being used. This implies that
+`std::iterator` takes no more than two template parameters. +]] +[[`BOOST_MSVC6_MEMBER_TEMPLATES`][Compiler][ +Microsoft Visual C++ 6.0 has enough member template idiosyncrasies+(being polite) that `BOOST_NO_MEMBER_TEMPLATES` is defined for this compiler. +`BOOST_MSVC6_MEMBER_TEMPLATES` is defined to allow compiler specific workarounds.
+This macro gets defined automatically if `BOOST_NO_MEMBER_TEMPLATES` is not +defined - in other words this is treated as a strict subset of the features +required by the standard. +]] +[[`BOOST_HAS_STDINT_H`][Platform][+There are no 1998 C++ Standard headers `<stdint.h>` or `<cstdint>`, although the
+1999 C Standard does include `<stdint.h>`. If `<stdint.h>` is present,+`<boost/stdint.h>` can make good use of it, so a flag is supplied (signalling
+presence; thus the default is not present, conforming to the current C++ +standard). +]] +] + +[endsect] + +[section Macros that describe possible C++0x features] ++The following macros describe features that are likely to be included in the +upcoming ISO C++ standard, C++0x, but have not yet been approved for inclusion
+in the language. + + +[table +[[Macro ][Description ]] + +[[`BOOST_HAS_CONCEPTS`][ +The compiler supports concepts. +]] +] + +[endsect] + +[section Macros that describe C++0x features not supported] ++The following macros describe features in the upcoming ISO C++ standard, C++0x,
+that are not yet supported by a particular compiler or library. + +[table +[[Macro ][Description ]] ++[[`BOOST_NO_0X_HDR_ARRAY`][The standard library does not provide header <array>.]] +[[`BOOST_NO_0X_HDR_CHRONO`][The standard library does not provide header <chrono>.]] +[[`BOOST_NO_0X_HDR_CODECVT`][The standard library does not provide header <codecvt>.]] +[[`BOOST_NO_0X_HDR_CONCEPTS`][The standard library does not provide header <concepts>.]] +[[`BOOST_NO_0X_HDR_CONDITION_VARIABLE`][The standard library does not provide header <condition_variable>.]] +[[`BOOST_NO_0X_HDR_CONTAINER_CONCEPTS`][The standard library does not provide header <container_concepts>.]] +[[`BOOST_NO_0X_HDR_FORWARD_LIST`][The standard library does not provide header <forward_list>.]] +[[`BOOST_NO_0X_HDR_FUTURE`][The standard library does not provide header <future>.]] +[[`BOOST_NO_0X_HDR_INITIALIZER_LIST`][The standard library does not provide header <initializer_list>.]] +[[`BOOST_NO_0X_HDR_ITERATOR_CONCEPTS`][The standard library does not provide header <iterator_concepts>.]] +[[`BOOST_NO_0X_HDR_MEMORY_CONCEPTS`][The standard library does not provide header <memory_concepts>.]] +[[`BOOST_NO_0X_HDR_MUTEX`][The standard library does not provide header <mutex>.]] +[[`BOOST_NO_0X_HDR_RANDOM`][The standard library does not provide header <random>.]] +[[`BOOST_NO_0X_HDR_RATIO`][The standard library does not provide header <ratio>.]] +[[`BOOST_NO_0X_HDR_REGEX`][The standard library does not provide header <regex>.]] +[[`BOOST_NO_0X_HDR_SYSTEM_ERROR`][The standard library does not provide header <system_error>.]] +[[`BOOST_NO_0X_HDR_THREAD`][The standard library does not provide header <thread>.]] +[[`BOOST_NO_0X_HDR_TUPLE`][The standard library does not provide header <tuple>.]] +[[`BOOST_NO_0X_HDR_TYPE_TRAITS`][The standard library does not provide header <type_traits>.]] +[[`BOOST_NO_0X_HDR_UNORDERED_MAP`][The standard library does not provide header <unordered_map>.]] +[[`BOOST_NO_0X_HDR_UNORDERED_SET`][The standard library does not provide header <unordered_set>.]]
+ +[[`BOOST_NO_AUTO_DECLARATIONS`][The compiler does not support+type deduction for variables declared with the `auto` keyword (`auto var = ...;`).
+]] +[[`BOOST_NO_AUTO_MULTIDECLARATIONS`][The compiler does not support+type deduction for multiple variables declared with the `auto` keyword (`auto var = ..., *ptr = ...;`).
+]] +[[`BOOST_NO_CHAR16_T`][The compiler does not support +type `char16_t`. +]] +[[`BOOST_NO_CHAR32_T`][The compiler does not support +type `char32_t`. +]] +[[`BOOST_NO_CONCEPTS`][The compiler does not support Concepts. +]]+[[`BOOST_NO_TEMPLATE_ALIASES`][The compiler does not support template aliases.
+]] +[[`BOOST_NO_CONSTEXPR`][The compiler does not support +`constexpr`. +]] +[[`BOOST_NO_DECLTYPE`][The compiler does not support +`decltype`. +]] +[[`BOOST_NO_DEFAULTED_FUNCTIONS`][The compiler does not support +defaulted (`= default`) functions. +]] +[[`BOOST_NO_DELETED_FUNCTIONS`][The compiler does not support +deleted (`= delete`) functions. +]] +[[`BOOST_NO_EXPLICIT_CONVERSION_OPERATIONS`][The compiler does not support +explicit conversion operators (`explicit operator T()`). +]] +[[`BOOST_NO_EXTERN_TEMPLATE`][The compiler does not support +explicit instantiation declarations for templates (`explicit template`). +]] +[[`BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS`][The compiler does not support +default template arguments for function templates. +]] +[[`BOOST_NO_INITIALIZER_LISTS`][ +The C++ compiler does not support C++0x initializer lists. +]] +[[`BOOST_NO_LAMBDAS`][The compiler does not support Lambdas. +]] +[[`BOOST_NO_LONG_LONG`][The compiler does not support `long long`. +]] +[[`BOOST_NO_NULLPTR`][The compiler does not support 'nullptr'. +]] +[[`BOOST_NO_RAW_LITERALS`][The compiler does not support +raw string literals. +]] +[[`BOOST_NO_RVALUE_REFERENCES`][The compiler does not support +r-value references. +]] +[[`BOOST_NO_SCOPED_ENUMS`][The compiler does not support +scoped enumerations (`enum class`). +]] +[[`BOOST_NO_STATIC_ASSERT`][The compiler does not support +`static_assert`. +]] +[[`BOOST_NO_STD_UNORDERD`][The standard library does not support +<unordered_map> and <unordered_set>. +]]+[[`BOOST_NO_TEMPLATE_ALIASES`][The compiler does not support template aliases.
+]] +[[`BOOST_NO_UNICODE_LITERALS`][The compiler does not support +Unicode (`u8`, `u`, `U`) literals. +]] +[[`BOOST_NO_VARIADIC_TEMPLATES`][The compiler does not support +variadic templates. +]] +] + +[endsect] + +[#config_helpers] + +[section Boost Helper Macros] + +The following macros are either simple helpers, or macros that provide +workarounds for compiler/standard library defects. + + +[table +[[Macro ][Description ]] + +[[`BOOST_WORKAROUND`][+This macro is used where a compiler specific workaround is required that is not otherwise +described by one of the other Boost.Config macros. To use the macro you must first
+`` +#include <boost/detail/workaround.hpp> +`` +usage is then: +`` +#if BOOST_WORKAROUND(MACRONAME, CONDITION) + // workaround code goes here... +#else + // Standard conforming code goes here... +#endif +``+where `MACRONAME` is a macro that usually describes the version number to be tested against, and `CONDITION` +is a comparison operator followed by a value. For example `BOOST_WORKAROUND(BOOST_INTEL, <= 1010)` would
+evaluate to `1` for Intel C++ 10.1 and earlier. + +The macro can also be used with `BOOST_TESTED_AT` if all+current compiler versions exhibit the issue, but the issue is expected to be fixed at some later point.
+ +For example+`BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x590))` would normally evaluate to `1` for all values +of `__BORLANDC__` /unless/ the macro `BOOST_DETECT_OUTDATED_WORKAROUNDS` is defined, in which case evaluates to
+`(__BORLANDC__ <= 0x590)`. ++[*Note]: the ultimate source of documentation for this macro is in [@../../../../boost/detail/workaround.hpp boost/detail/workaround.hpp].
+]] +[[`BOOST_DEDUCED_TYPENAME`][+Some compilers don't support the use of typename for dependent types in deduced
+contexts. This macro expands to nothing on those compilers, and typename +elsewhere. For example, replace: +`template <class T> void f(T, typename T::type);` +with: +`template <class T> void f(T, BOOST_DEDUCED_TYPENAME T::type);` +]] +[[`BOOST_HASH_MAP_HEADER`][ +The header to include to get the SGI `hash_map` class. This macro is only +available if `BOOST_HAS_HASH` is defined. +]] +[[`BOOST_HASH_SET_HEADER`][ +The header to include to get the SGI `hash_set` class. This macro is only +available if `BOOST_HAS_HASH` is defined. +]] +[[`BOOST_SLIST_HEADER`][ +The header to include to get the SGI `slist` class. This macro is only +available if `BOOST_HAS_SLIST` is defined. +]] +[[`BOOST_STD_EXTENSION_NAMESPACE`][ +The namespace used for std library extensions (hashtable classes etc). +]] +[[`BOOST_STATIC_CONSTANT(Type, assignment)`][ +On compilers which don't allow in-class initialization of static integral+constant members, we must use enums as a workaround if we want the constants
+to be available at compile-time. This macro gives us a convenient way to +declare such constants. +For example instead of: +`` +struct foo{ + static const int value = 2; +}; +`` +use: +`` +struct foo{ + BOOST_STATIC_CONSTANT(int, value = 2); +}; +`` +]] +[[`BOOST_UNREACHABLE_RETURN(result)`][ +Normally evaluates to nothing, but evaluates to return x; if the compiler +requires a return, even when it can never be reached. +]] +[[`BOOST_EXPLICIT_TEMPLATE_TYPE(t)` + `BOOST_EXPLICIT_TEMPLATE_NON_TYPE(t,v)` + `BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(t)` + `BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE(t,v)`][+Some compilers silently "fold" different function template instantiations if +some of the template parameters don't appear in the function parameter list.
+For instance: +`` + #include <iostream> + #include <ostream> + #include <typeinfo> + + template <int n> + void f() { std::cout << n << ' '; } + + template <typename T> + void g() { std::cout << typeid(T).name() << ' '; } + + int main() { + f<1>(); + f<2>(); + + g<int>(); + g<double>(); + } +``+incorrectly outputs [^2 2 double double] on VC++ 6. These macros, to be used +in the function parameter list, fix the problem without effects on the calling
+syntax. For instance, in the case above write: +`` + template <int n> + void f(BOOST_EXPLICIT_TEMPLATE_NON_TYPE(int, n)) { ... } + + template <typename T> + void g(BOOST_EXPLICIT_TEMPLATE_TYPE(T)) { ... } +`` +Beware that they can declare (for affected compilers) a dummy defaulted +parameter, so they + +[*a)] should be always invoked [*at the end] of the parameter list + +[*b)] can't be used if your function template is multiply declared. ++Furthermore, in order to add any needed comma separator, an `APPEND_*` version
+must be used when the macro invocation appears after a normal parameter +declaration or after the invocation of another macro of this same group. +]] +[[`BOOST_USE_FACET(Type, loc)`][ +When the standard library does not have a comforming `std::use_facet` there +are various workarounds available, but they differ from library to library.+This macro provides a consistent way to access a locale's facets. For example,
+replace: +`std::use_facet<Type>(loc);` +with: +`BOOST_USE_FACET(Type, loc);` +Note do not add a `std::` prefix to the front of `BOOST_USE_FACET`. +]] +[[`BOOST_HAS_FACET(Type, loc)`][ +When the standard library does not have a comforming `std::has_facet` there +are various workarounds available, but they differ from library to library.+This macro provides a consistent way to check a locale's facets. For example,
+replace: +`std::has_facet<Type>(loc);` +with: +`BOOST_HAS_FACET(Type, loc);` +Note do not add a `std::` prefix to the front of `BOOST_HAS_FACET`. +]] +[[`BOOST_NESTED_TEMPLATE`][ +Member templates are supported by some compilers even though they can't use +the `A::template member<U>` syntax, as a workaround replace: +`typedef typename A::template rebind<U> binder;` +with: +`typedef typename A::BOOST_NESTED_TEMPLATE rebind<U> binder;` +]] +[[`BOOST_STRINGIZE(X)`][ +Converts the parameter `X` to a string after macro replacement on `X` has +been performed. +]] +[[`BOOST_JOIN(X,Y)`][+This piece of macro magic joins the two arguments together, even when one of +the arguments is itself a macro (see 16.3.1 in C++ standard). This is normally
+used to create a mangled name in combination with a predefined macro such a +\_\_LINE__. +]] +] + +[endsect] + +[#config_info_macros] + +[section Boost Informational Macros] + +The following macros describe boost features; these are, generally speaking +the only boost macros that should be tested in user code. + +[table + +[[Macro ][Header ][Description ]] + +[[`BOOST_VERSION`][`<boost/version.hpp>`][ +Describes the boost version number in XYYYZZ format such that:+`(BOOST_VERSION % 100)` is the sub-minor version, `((BOOST_VERSION / 100) % 1000)`
+is the minor version, and `(BOOST_VERSION / 100000)` is the major version. +]] +[[`BOOST_NO_INT64_T`][`<boost/cstdint.hpp>` `<boost/stdint.h>`][ +Defined if there are no 64-bit integral types: `int64_t`, `uint64_t` etc. +]] +[[`BOOST_NO_INTEGRAL_INT64_T`][`<boost/cstdint.hpp>` `<boost/stdint.h>`][ +Defined if `int64_t` as defined by `<boost/cstdint.hpp>` is not usable in +integral constant expressions. +]] +[[`BOOST_MSVC`][`<boost/config.hpp>`][ +Defined if the compiler is really Microsoft Visual C++, as opposed to one+of the many other compilers that also define `_MSC_VER`. Has the same value as
+_MSC_VER. +]] +[[`BOOST_MSVC_FULL_VER`][`<boost/config.hpp>`][+Defined to a normalised 9 digit version of _MSC_FULL_VER (which sometimes only has 8 digits), +the macro has the form VVMMPPPPP where VV is the major version number, MM is the minor version number, and
+PPPPP is the compiler build number. +]] +[[`BOOST_INTEL`][`<boost/config.hpp>`][ +Defined if the compiler is an Intel compiler, takes the same value as the +compiler version macro. +]] +[[`BOOST_WINDOWS`][`<boost/config.hpp>`][ +Defined if the Windows platfrom API is available. +]] +[[`BOOST_DINKUMWARE_STDLIB`][`<boost/config.hpp>`][ +Defined if the dinkumware standard library is in use, takes the same value+as the Dinkumware library version macro `_CPPLIB_VER` if defined, otherwise 1.
+]] +[[`BOOST_NO_WREGEX`][`<boost/regex.hpp>`][ +Defined if the regex library does not support wide character regular +expressions. +]] +[[`BOOST_COMPILER`][`<boost/config.hpp>`][ +Defined as a string describing the name and version number of the compiler +in use. Mainly for debugging the configuration. +]] +[[`BOOST_STDLIB`][`<boost/config.hpp>`][ +Defined as a string describing the name and version number of the standard +library in use. Mainly for debugging the configuration. +]] +[[`BOOST_PLATFORM`][`<boost/config.hpp>`][+Defined as a string describing the name of the platform. Mainly for debugging
+the configuration. +]] +] + +[endsect] + +[section Macros for libraries with separate source code] ++The following macros and helper headers are of use to authors whose libraries +include separate source code, and are intended to address two issues: fixing +the ABI of the compiled library, and selecting which compiled library to link
+against based upon the compilers settings. + +[section ABI Fixing] ++When linking against a pre-compiled library it vital that the ABI used by the +compiler when building the library ['matches exactly] the ABI used by the code
+using the library. In this case ABI means things like the struct packing +arrangement used, the name mangling scheme used, or the size of some types+(enum types for example). This is separate from things like threading support, +or runtime library variations, which have to be dealt with by build variants. +To put this in perspective there is one compiler (Borland's) that has so many +compiler options that make subtle changes to the ABI, that at least in theory
+there 3200 combinations, and that's without considering runtime library +variations. Fortunately these variations can be managed by `#pragma`'s that +tell the compiler what ABI to use for the types declared in your library.+In order to avoid sprinkling `#pragma`'s all over the boost headers, there are
+some prefix and suffix headers that do the job. Typical usage is: + +[*my_library.hpp] + + #ifndef MY_INCLUDE_GUARD + #define MY_INCLUDE_GUARD + + // all includes go here: + ``[^[*#include <boost/config.hpp>]]`` + #include <whatever> ++ ``[^[*#include <boost/config/abi_prefix.hpp>]]`` // must be the last #include
+ + namespace boost { + + // your code goes here + + } ++ ``[^[*#include <boost/config/abi_suffix.hpp>]]`` // pops abi_prefix.hpp pragmas
+ + #endif // include guard + +[*my_library.cpp] + + ... + // nothing special need be done in the implementation file + ... ++The user can disable this mechanism by defining `BOOST_DISABLE_ABI_HEADERS`, or +they can define `BOOST_ABI_PREFIX` and/or `BOOST_ABI_SUFFIX` to point to their
+own prefix/suffix headers if they so wish. + +[endsect] + +[section Automatic library selection] ++It is essential that users link to a build of a library which was built against +the same runtime library that their application will be built against -if this +does not happen then the library will not be binary compatible with their own +code- and there is a high likelihood that their application will experience +runtime crashes. These kinds of problems can be extremely time consuming and +difficult to debug, and often lead to frustrated users and authors alike (simply
+selecting the right library to link against is not as easy as it seems when +their are 6-8 of them to chose from, and some users seem to be blissfully +unaware that there even are different runtimes available to them). ++To solve this issue, some compilers allow source code to contain `#pragma`'s that
+instruct the linker which library to link against, all the user need do is+include the headers they need, place the compiled libraries in their library
+search path, and the compiler and linker do the rest. Boost.config supports+this via the header `<boost/config/auto_link.hpp>`, before including this header
+one or more of the following macros need to be defined: + +[variablelist +[[`BOOST_LIB_NAME`][ +Required: An identifier containing the basename of the library, for +example 'boost_regex'. +]] +[[`BOOST_DYN_LINK`][ +Optional: when set link to dll rather than static library. +]] +[[`BOOST_LIB_DIAGNOSTIC`][+Optional: when set the header will print out the name of the library selected
+(useful for debugging). +]] +] ++If the compiler supports this mechanism, then it will be told to link against +the appropriately named library, the actual algorithm used to mangle the name +of the library is documented inside `<boost/config/auto_link.hpp>` and has to
+match that used to create the libraries via bjam 's install rules. + + +[*my_library.hpp] + + ... + // + // Don't include auto-linking code if the user has disabled it by + // defining BOOST_ALL_NO_LIB, or BOOST_MY_LIBRARY_NO_LIB, or if this+ // is one of our own source files (signified by BOOST_MY_LIBRARY_SOURCE):
+ //+ #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_MY_LIBRARY_NO_LIB) && !defined(BOOST_MY_LIBRARY_SOURCE)
+ # define BOOST_LIB_NAME boost_my_library + # ifdef BOOST_MY_LIBRARY_DYN_LINK + # define BOOST_DYN_LINK + # endif + # include <boost/config/auto_link.hpp> + #endif + ... + +[*my_library.cpp] + + // define BOOST_MY_LIBRARY_SOURCE so that the header knows that the+ // library is being built (possibly exporting rather than importing code)
+ // + #define BOOST_MY_LIBRARY_SOURCE + + #include <boost/my_library/my_library.hpp> + ... + +[endsect] + +[endsect] + +[endsect] ======================================= --- /dev/null +++ /trunk/libs/config/doc/rationale.qbk Fri May 28 00:05:44 2010 @@ -0,0 +1,80 @@ +[/ + Boost.Config + + Copyright (c) 2001 Beman Dawes + Copyright (c) 2001 Vesa Karvonen + Copyright (c) 2001 John Maddock + + Distributed under the Boost Software License, Version 1.0. + (See accompanying file LICENSE_1_0.txt or copy at + http://www.boost.org/LICENSE_1_0.txt) +] + +[section Rationale] ++The problem with many traditional "textbook" implementations of configuration
+headers (where all the configuration options are in a single "monolithic" +header) is that they violate certain fundamental software engineering +principles which would have the effect of making boost more fragile, more +difficult to maintain and more difficult to use safely. You can find a +description of the principles from the __PRINCIPLES_AND_PATTERNS_ARTICLE__. + +[section The problem] + +Consider a situation in which you are concurrently developing on multiple +platforms. Then consider adding a new platform or changing the platform+definitions of an existing platform. What happens? Everything, and this does
+literally mean everything, recompiles. Isn't it quite absurd that adding a +new platform, which has absolutely nothing to do with previously existing +platforms, means that all code on all existing platforms needs to be +recompiled? + +Effectively, there is an imposed physical dependency between platforms that +have nothing to do with each other. Essentially, the traditional solution +employed by configuration headers does not conform to the Open-Closed +Principle: + +[: [*"A module should be open for extension but closed for modification."]] ++Extending a traditional configuration header implies modifying existing code.
++Furthermore, consider the complexity and fragility of the platform detection
+code. What if a simple change breaks the detection on some minor platform? +What if someone accidentally or on purpose (as a workaround for some other +problem) defines some platform dependent macros that are used by the +detection code? A traditional configuration header is one of the most +volatile headers of the entire library, and more stable elements of +Boost would depend on it. This violates the Stable Dependencies Principle: + +[: [*"Depend in the direction of stability."]] ++After even a minor change to a traditional configuration header on one minor
+platform, almost everything on every platform should be tested if we follow +sound software engineering practice. + +Another important issue is that it is not always possible to submit changes+to `<boost/config.hpp>`. Some boost users are currently working on platforms
+using tools and libraries that are under strict Non-Disclosure Agreements. +In this situation it is impossible to submit changes to a traditional +monolithic configuration header, instead some method by which the user +can insert their own configuration code must be provided. + +[endsect] + +[section The solution] + +The approach taken by boost's configuration headers is to separate +configuration into three orthogonal parts: the compiler, the standard +library and the platform. Each compiler/standard library/platform gets +its own mini-configuration header, so that changes to one compiler's +configuration (for example) does not affect other compilers. In addition +there are measures that can be taken both to omit the compiler/standard +library/platform detection code (so that adding support to a new platform +does not break dependencies), or to freeze the configuration completely; +providing almost complete protection against dependency changes. + +[endsect] + +[endsect] + + ======================================= --- /dev/null +++ /trunk/libs/config/test/Jamfile.v2 Fri May 28 00:05:44 2010 @@ -0,0 +1,61 @@ +# +# Copyright John Maddock 2008. +# Use, modification and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# If you need to alter build preferences then set them in +# the template defined in options_v2.jam. +# + +import modules ; + +local is_unix = [ modules.peek : UNIX ] ; + +if $(is_unix) +{ + local osname = [ SHELL uname ] ; + + switch $(osname) + { + case "Sun*" : OTHERFLAGS = "-lpthread -lrt" ; + case "*BSD*" : OTHERFLAGS = "-lpthread" ; + } +} + +test-suite config + : + [ run config_test.cpp + : #args + : #input-files + : #requirements + <threading>multi + : config_test_threaded + ] + [ run config_test.cpp + : #args + : #input-files + : #requirements+ <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static
+ <target-os>linux:<linkflags>-lpthread + <target-os>linux:<linkflags>-lrt + <toolset>gcc:<linkflags>$(OTHERFLAGS) + ]+ [ run config_info.cpp : : : <test-info>always_show_run_output <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ] + [ run config_info.cpp : : : <test-info>always_show_run_output <threading>multi : config_info_threaded ] + [ run math_info.cpp : : : <test-info>always_show_run_output <toolset>borland:<runtime-link>static <toolset>borland:<link>static ]
+ [ run abi/abi_test.cpp abi/main.cpp ] + [ run limits_test.cpp ../../test/build//boost_test_exec_monitor ] + [ run link/main.cpp link//link_test + : #args + : #input-files + : #requirements + <runtime-link>shared + <define>BOOST_DYN_LINK=1 + <define>BOOST_CONFIG_NO_LIB=1 + : + config_link_test + ] + [ compile-fail threads/test_thread_fail1.cpp ] + [ compile-fail threads/test_thread_fail2.cpp ] + ; ======================================= --- /dev/null +++ /trunk/libs/config/test/all/Jamfile.v2 Fri May 28 00:05:44 2010 @@ -0,0 +1,517 @@ +# +# Regression test Jamfile for boost configuration setup. +# *** DO NOT EDIT THIS FILE BY HAND *** +# This file was automatically generated on Sun Oct 11 13:04:18 2009 +# by libs/config/tools/generate.cpp +# Copyright John Maddock. +# Use, modification and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +# +# If you need to alter build preferences then set them in +# the template defined in options_v2.jam. +# +path-constant DOT : . ; +include $(DOT)/options_v2.jam ; ++run ../config_info.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;
+run ../config_info.cpp : : : <threading>multi : config_info_threaded ;+run ../math_info.cpp : : : <toolset>borland:<runtime-link>static <toolset>borland:<link>static ; +run ../config_test.cpp : : : <threading>single <toolset>msvc:<runtime-link>static <toolset>msvc:<link>static ;
+run ../config_test.cpp : : : <threading>multi : config_test_threaded ; +run ../limits_test.cpp ../../../test/build//boost_test_exec_monitor ; +run ../abi/abi_test.cpp ../abi/main.cpp ; + +test-suite "BOOST_HAS_TWO_ARG_USE_FACET" : +[ run ../has_2arg_use_facet_pass.cpp ] +[ compile-fail ../has_2arg_use_facet_fail.cpp ] ; +test-suite "BOOST_HAS_BETHREADS" : +[ run ../has_bethreads_pass.cpp ] +[ compile-fail ../has_bethreads_fail.cpp ] ; +test-suite "BOOST_HAS_CLOCK_GETTIME" : +[ run ../has_clock_gettime_pass.cpp ] +[ compile-fail ../has_clock_gettime_fail.cpp ] ; +test-suite "BOOST_HAS_CONCEPTS" : +[ run ../has_concepts_pass.cpp ] +[ compile-fail ../has_concepts_fail.cpp ] ; +test-suite "BOOST_HAS_DIRENT_H" : +[ run ../has_dirent_h_pass.cpp ] +[ compile-fail ../has_dirent_h_fail.cpp ] ; +test-suite "BOOST_HAS_EXPM1" : +[ run ../has_expm1_pass.cpp ] +[ compile-fail ../has_expm1_fail.cpp ] ; +test-suite "BOOST_HAS_FTIME" : +[ run ../has_ftime_pass.cpp ] +[ compile-fail ../has_ftime_fail.cpp ] ; +test-suite "BOOST_HAS_GETTIMEOFDAY" : +[ run ../has_gettimeofday_pass.cpp ] +[ compile-fail ../has_gettimeofday_fail.cpp ] ; +test-suite "BOOST_HAS_HASH" : +[ run ../has_hash_pass.cpp ] +[ compile-fail ../has_hash_fail.cpp ] ; +test-suite "BOOST_HAS_LOG1P" : +[ run ../has_log1p_pass.cpp ] +[ compile-fail ../has_log1p_fail.cpp ] ; +test-suite "BOOST_HAS_LONG_LONG" : +[ run ../has_long_long_pass.cpp ] +[ compile-fail ../has_long_long_fail.cpp ] ; +test-suite "BOOST_HAS_MACRO_USE_FACET" : +[ run ../has_macro_use_facet_pass.cpp ] +[ compile-fail ../has_macro_use_facet_fail.cpp ] ; +test-suite "BOOST_HAS_MS_INT64" : +[ run ../has_ms_int64_pass.cpp ] +[ compile-fail ../has_ms_int64_fail.cpp ] ; +test-suite "BOOST_HAS_NANOSLEEP" : +[ run ../has_nanosleep_pass.cpp ] +[ compile-fail ../has_nanosleep_fail.cpp ] ; +test-suite "BOOST_HAS_NL_TYPES_H" : +[ run ../has_nl_types_h_pass.cpp ] +[ compile-fail ../has_nl_types_h_fail.cpp ] ; +test-suite "BOOST_HAS_NRVO" : +[ run ../has_nrvo_pass.cpp ] +[ compile-fail ../has_nrvo_fail.cpp ] ; +test-suite "BOOST_HAS_PARTIAL_STD_ALLOCATOR" : +[ run ../has_part_alloc_pass.cpp ] +[ compile-fail ../has_part_alloc_fail.cpp ] ; +test-suite "BOOST_HAS_PTHREADS" : +[ run ../has_pthreads_pass.cpp ] +[ compile-fail ../has_pthreads_fail.cpp ] ; +test-suite "BOOST_HAS_PTHREAD_DELAY_NP" : +[ run ../has_pthread_delay_np_pass.cpp ] +[ compile-fail ../has_pthread_delay_np_fail.cpp ] ; +test-suite "BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE" : +[ run ../has_pthread_ma_st_pass.cpp ] +[ compile-fail ../has_pthread_ma_st_fail.cpp ] ; +test-suite "BOOST_HAS_PTHREAD_YIELD" : +[ run ../has_pthread_yield_pass.cpp ] +[ compile-fail ../has_pthread_yield_fail.cpp ] ; +test-suite "BOOST_HAS_RVALUE_REFS" : +[ run ../has_rvalue_refs_pass.cpp ] +[ compile-fail ../has_rvalue_refs_fail.cpp ] ; +test-suite "BOOST_HAS_SCHED_YIELD" : +[ run ../has_sched_yield_pass.cpp ] +[ compile-fail ../has_sched_yield_fail.cpp ] ; +test-suite "BOOST_HAS_SGI_TYPE_TRAITS" : +[ run ../has_sgi_type_traits_pass.cpp ] +[ compile-fail ../has_sgi_type_traits_fail.cpp ] ; +test-suite "BOOST_HAS_SIGACTION" : +[ run ../has_sigaction_pass.cpp ] +[ compile-fail ../has_sigaction_fail.cpp ] ; +test-suite "BOOST_HAS_SLIST" : +[ run ../has_slist_pass.cpp ] +[ compile-fail ../has_slist_fail.cpp ] ; +test-suite "BOOST_HAS_STATIC_ASSERT" : +[ run ../has_static_assert_pass.cpp ] +[ compile-fail ../has_static_assert_fail.cpp ] ; +test-suite "BOOST_HAS_STDINT_H" : +[ run ../has_stdint_h_pass.cpp ] +[ compile-fail ../has_stdint_h_fail.cpp ] ; +test-suite "BOOST_HAS_STLP_USE_FACET" : +[ run ../has_stlp_use_facet_pass.cpp ] +[ compile-fail ../has_stlp_use_facet_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_ARRAY" : +[ run ../has_tr1_array_pass.cpp ] +[ compile-fail ../has_tr1_array_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_BIND" : +[ run ../has_tr1_bind_pass.cpp ] +[ compile-fail ../has_tr1_bind_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_COMPLEX_OVERLOADS" : +[ run ../has_tr1_complex_over_pass.cpp ] +[ compile-fail ../has_tr1_complex_over_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG" : +[ run ../has_tr1_complex_trig_pass.cpp ] +[ compile-fail ../has_tr1_complex_trig_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_FUNCTION" : +[ run ../has_tr1_function_pass.cpp ] +[ compile-fail ../has_tr1_function_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_HASH" : +[ run ../has_tr1_hash_pass.cpp ] +[ compile-fail ../has_tr1_hash_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_MEM_FN" : +[ run ../has_tr1_mem_fn_pass.cpp ] +[ compile-fail ../has_tr1_mem_fn_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_RANDOM" : +[ run ../has_tr1_random_pass.cpp ] +[ compile-fail ../has_tr1_random_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_REFERENCE_WRAPPER" : +[ run ../has_tr1_ref_wrap_pass.cpp ] +[ compile-fail ../has_tr1_ref_wrap_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_REGEX" : +[ run ../has_tr1_regex_pass.cpp ] +[ compile-fail ../has_tr1_regex_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_RESULT_OF" : +[ run ../has_tr1_result_of_pass.cpp ] +[ compile-fail ../has_tr1_result_of_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_SHARED_PTR" : +[ run ../has_tr1_shared_ptr_pass.cpp ] +[ compile-fail ../has_tr1_shared_ptr_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_TUPLE" : +[ run ../has_tr1_tuple_pass.cpp ] +[ compile-fail ../has_tr1_tuple_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_TYPE_TRAITS" : +[ run ../has_tr1_type_traits_pass.cpp ] +[ compile-fail ../has_tr1_type_traits_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_UNORDERED_MAP" : +[ run ../has_tr1_unordered_map_pass.cpp ] +[ compile-fail ../has_tr1_unordered_map_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_UNORDERED_SET" : +[ run ../has_tr1_unordered_set_pass.cpp ] +[ compile-fail ../has_tr1_unordered_set_fail.cpp ] ; +test-suite "BOOST_HAS_TR1_UTILITY" : +[ run ../has_tr1_utility_pass.cpp ] +[ compile-fail ../has_tr1_utility_fail.cpp ] ; +test-suite "BOOST_HAS_UNISTD_H" : +[ run ../has_unistd_h_pass.cpp ] +[ compile-fail ../has_unistd_h_fail.cpp ] ; +test-suite "BOOST_HAS_VARIADIC_TMPL" : +[ run ../has_variadic_tmpl_pass.cpp ] +[ compile-fail ../has_variadic_tmpl_fail.cpp ] ; +test-suite "BOOST_MSVC6_MEMBER_TEMPLATES" : +[ run ../has_vc6_mem_templ_pass.cpp ] +[ compile-fail ../has_vc6_mem_templ_fail.cpp ] ; +test-suite "BOOST_MSVC_STD_ITERATOR" : +[ run ../has_vc_iterator_pass.cpp ] +[ compile-fail ../has_vc_iterator_fail.cpp ] ; +test-suite "BOOST_HAS_WINTHREADS" : +[ run ../has_winthreads_pass.cpp ] +[ compile-fail ../has_winthreads_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_ARRAY" : +[ run ../no_0x_hdr_array_pass.cpp ] +[ compile-fail ../no_0x_hdr_array_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_CHRONO" : +[ run ../no_0x_hdr_chrono_pass.cpp ] +[ compile-fail ../no_0x_hdr_chrono_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_CODECVT" : +[ run ../no_0x_hdr_codecvt_pass.cpp ] +[ compile-fail ../no_0x_hdr_codecvt_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_CONCEPTS" : +[ run ../no_0x_hdr_concepts_pass.cpp ] +[ compile-fail ../no_0x_hdr_concepts_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_CONDITION_VARIABLE" : +[ run ../no_0x_hdr_condition_variable_pass.cpp ] +[ compile-fail ../no_0x_hdr_condition_variable_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_CONTAINER_CONCEPTS" : +[ run ../no_0x_hdr_container_concepts_pass.cpp ] +[ compile-fail ../no_0x_hdr_container_concepts_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_FORWARD_LIST" : +[ run ../no_0x_hdr_forward_list_pass.cpp ] +[ compile-fail ../no_0x_hdr_forward_list_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_FUTURE" : +[ run ../no_0x_hdr_future_pass.cpp ] +[ compile-fail ../no_0x_hdr_future_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_INITIALIZER_LIST" : +[ run ../no_0x_hdr_initializer_list_pass.cpp ] +[ compile-fail ../no_0x_hdr_initializer_list_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_ITERATOR_CONCEPTS" : +[ run ../no_0x_hdr_iterator_concepts_pass.cpp ] +[ compile-fail ../no_0x_hdr_iterator_concepts_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_MEMORY_CONCEPTS" : +[ run ../no_0x_hdr_memory_concepts_pass.cpp ] +[ compile-fail ../no_0x_hdr_memory_concepts_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_MUTEX" : +[ run ../no_0x_hdr_mutex_pass.cpp ] +[ compile-fail ../no_0x_hdr_mutex_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_RANDOM" : +[ run ../no_0x_hdr_random_pass.cpp ] +[ compile-fail ../no_0x_hdr_random_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_RATIO" : +[ run ../no_0x_hdr_ratio_pass.cpp ] +[ compile-fail ../no_0x_hdr_ratio_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_REGEX" : +[ run ../no_0x_hdr_regex_pass.cpp ] +[ compile-fail ../no_0x_hdr_regex_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_SYSTEM_ERROR" : +[ run ../no_0x_hdr_system_error_pass.cpp ] +[ compile-fail ../no_0x_hdr_system_error_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_THREAD" : +[ run ../no_0x_hdr_thread_pass.cpp ] +[ compile-fail ../no_0x_hdr_thread_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_TUPLE" : +[ run ../no_0x_hdr_tuple_pass.cpp ] +[ compile-fail ../no_0x_hdr_tuple_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_TYPE_TRAITS" : +[ run ../no_0x_hdr_type_traits_pass.cpp ] +[ compile-fail ../no_0x_hdr_type_traits_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_UNORDERED_MAP" : +[ run ../no_0x_hdr_unordered_map_pass.cpp ] +[ compile-fail ../no_0x_hdr_unordered_map_fail.cpp ] ; +test-suite "BOOST_NO_0X_HDR_UNORDERED_SET" : +[ run ../no_0x_hdr_unordered_set_pass.cpp ] +[ compile-fail ../no_0x_hdr_unordered_set_fail.cpp ] ; +test-suite "BOOST_NO_ADL_BARRIER" : +[ run ../no_adl_barrier_pass.cpp ] +[ compile-fail ../no_adl_barrier_fail.cpp ] ; +test-suite "BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP" : +[ run ../no_arg_dep_lookup_pass.cpp ] +[ compile-fail ../no_arg_dep_lookup_fail.cpp ] ; +test-suite "BOOST_NO_ARRAY_TYPE_SPECIALIZATIONS" : +[ run ../no_array_type_spec_pass.cpp ] +[ compile-fail ../no_array_type_spec_fail.cpp ] ; +test-suite "BOOST_NO_AUTO_DECLARATIONS" : +[ run ../no_auto_declarations_pass.cpp ] +[ compile-fail ../no_auto_declarations_fail.cpp ] ; +test-suite "BOOST_NO_AUTO_MULTIDECLARATIONS" : +[ run ../no_auto_multidecl_pass.cpp ] +[ compile-fail ../no_auto_multidecl_fail.cpp ] ; +test-suite "BOOST_NO_AUTO_PTR" : +[ run ../no_auto_ptr_pass.cpp ] +[ compile-fail ../no_auto_ptr_fail.cpp ] ; +test-suite "BOOST_BCB_PARTIAL_SPECIALIZATION_BUG" : +[ run ../no_bcb_partial_spec_pass.cpp ] +[ compile-fail ../no_bcb_partial_spec_fail.cpp ] ; +test-suite "BOOST_NO_CHAR16_T" : +[ run ../no_char16_t_pass.cpp ] +[ compile-fail ../no_char16_t_fail.cpp ] ; +test-suite "BOOST_NO_CHAR32_T" : +[ run ../no_char32_t_pass.cpp ] +[ compile-fail ../no_char32_t_fail.cpp ] ; +test-suite "BOOST_NO_CONCEPTS" : +[ run ../no_concepts_pass.cpp ] +[ compile-fail ../no_concepts_fail.cpp ] ; +test-suite "BOOST_NO_CONSTEXPR" : +[ run ../no_constexpr_pass.cpp ] +[ compile-fail ../no_constexpr_fail.cpp ] ; +test-suite "BOOST_NO_CTYPE_FUNCTIONS" : +[ run ../no_ctype_functions_pass.cpp ] +[ compile-fail ../no_ctype_functions_fail.cpp ] ; +test-suite "BOOST_NO_CV_SPECIALIZATIONS" : +[ run ../no_cv_spec_pass.cpp ] +[ compile-fail ../no_cv_spec_fail.cpp ] ; +test-suite "BOOST_NO_CV_VOID_SPECIALIZATIONS" : +[ run ../no_cv_void_spec_pass.cpp ] +[ compile-fail ../no_cv_void_spec_fail.cpp ] ; +test-suite "BOOST_NO_CWCHAR" : +[ run ../no_cwchar_pass.cpp ] +[ compile-fail ../no_cwchar_fail.cpp ] ; +test-suite "BOOST_NO_CWCTYPE" : +[ run ../no_cwctype_pass.cpp ] +[ compile-fail ../no_cwctype_fail.cpp ] ; +test-suite "BOOST_NO_DECLTYPE" : +[ run ../no_decltype_pass.cpp ] +[ compile-fail ../no_decltype_fail.cpp ] ; +test-suite "BOOST_DEDUCED_TYPENAME" : +[ run ../no_ded_typename_pass.cpp ] +[ compile-fail ../no_ded_typename_fail.cpp ] ; +test-suite "BOOST_NO_DEFAULTED_FUNCTIONS" : +[ run ../no_defaulted_functions_pass.cpp ] +[ compile-fail ../no_defaulted_functions_fail.cpp ] ; +test-suite "BOOST_NO_DELETED_FUNCTIONS" : +[ run ../no_deleted_functions_pass.cpp ] +[ compile-fail ../no_deleted_functions_fail.cpp ] ; +test-suite "BOOST_NO_DEPENDENT_NESTED_DERIVATIONS" : +[ run ../no_dep_nested_class_pass.cpp ] +[ compile-fail ../no_dep_nested_class_fail.cpp ] ; +test-suite "BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS" : +[ run ../no_dep_val_param_pass.cpp ] +[ compile-fail ../no_dep_val_param_fail.cpp ] ; +test-suite "BOOST_NO_EXCEPTIONS" : +[ run ../no_exceptions_pass.cpp ] +[ compile-fail ../no_exceptions_fail.cpp ] ; +test-suite "BOOST_NO_EXCEPTION_STD_NAMESPACE" : +[ run ../no_excep_std_pass.cpp ] +[ compile-fail ../no_excep_std_fail.cpp ] ; +test-suite "BOOST_NO_EXPLICIT_CONVERSION_OPERATORS" : +[ run ../no_explicit_cvt_ops_pass.cpp ] +[ compile-fail ../no_explicit_cvt_ops_fail.cpp ] ; +test-suite "BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS" : +[ run ../no_exp_func_tem_arg_pass.cpp ] +[ compile-fail ../no_exp_func_tem_arg_fail.cpp ] ; +test-suite "BOOST_NO_EXTERN_TEMPLATE" : +[ run ../no_extern_template_pass.cpp ] +[ compile-fail ../no_extern_template_fail.cpp ] ; +test-suite "BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS" : +[ run ../no_function_template_default_args_pass.cpp ] +[ compile-fail ../no_function_template_default_args_fail.cpp ] ; +test-suite "BOOST_NO_FUNCTION_TYPE_SPECIALIZATIONS" : +[ run ../no_function_type_spec_pass.cpp ] +[ compile-fail ../no_function_type_spec_fail.cpp ] ; +test-suite "BOOST_NO_FUNCTION_TEMPLATE_ORDERING" : +[ run ../no_func_tmp_order_pass.cpp ] +[ compile-fail ../no_func_tmp_order_fail.cpp ] ; +test-suite "BOOST_NO_MS_INT64_NUMERIC_LIMITS" : +[ run ../no_i64_limits_pass.cpp ] +[ compile-fail ../no_i64_limits_fail.cpp ] ; +test-suite "BOOST_NO_INITIALIZER_LISTS" : +[ run ../no_initializer_lists_pass.cpp ] +[ compile-fail ../no_initializer_lists_fail.cpp ] ; +test-suite "BOOST_NO_INCLASS_MEMBER_INITIALIZATION" : +[ run ../no_inline_memb_init_pass.cpp ] +[ compile-fail ../no_inline_memb_init_fail.cpp ] ; +test-suite "BOOST_NO_INTEGRAL_INT64_T" : +[ run ../no_integral_int64_t_pass.cpp ] +[ compile-fail ../no_integral_int64_t_fail.cpp ] ; +test-suite "BOOST_NO_IOSFWD" : +[ run ../no_iosfwd_pass.cpp ] +[ compile-fail ../no_iosfwd_fail.cpp ] ; +test-suite "BOOST_NO_IOSTREAM" : +[ run ../no_iostream_pass.cpp ] +[ compile-fail ../no_iostream_fail.cpp ] ; +test-suite "BOOST_NO_IS_ABSTRACT" : +[ run ../no_is_abstract_pass.cpp ] +[ compile-fail ../no_is_abstract_fail.cpp ] ; +test-suite "BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS" : +[ run ../no_iter_construct_pass.cpp ] +[ compile-fail ../no_iter_construct_fail.cpp ] ; +test-suite "BOOST_NO_LAMBDAS" : +[ run ../no_lambdas_pass.cpp ] +[ compile-fail ../no_lambdas_fail.cpp ] ; +test-suite "BOOST_NO_LIMITS" : +[ run ../no_limits_pass.cpp ] +[ compile-fail ../no_limits_fail.cpp ] ; +test-suite "BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS" : +[ run ../no_limits_const_exp_pass.cpp ] +[ compile-fail ../no_limits_const_exp_fail.cpp ] ; +test-suite "BOOST_NO_LONG_LONG_NUMERIC_LIMITS" : +[ run ../no_ll_limits_pass.cpp ] +[ compile-fail ../no_ll_limits_fail.cpp ] ; +test-suite "BOOST_NO_LONG_LONG" : +[ run ../no_long_long_pass.cpp ] +[ compile-fail ../no_long_long_fail.cpp ] ; +test-suite "BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS" : +[ run ../no_mem_func_spec_pass.cpp ] +[ compile-fail ../no_mem_func_spec_fail.cpp ] ; +test-suite "BOOST_NO_MEMBER_TEMPLATES" : +[ run ../no_mem_templates_pass.cpp ] +[ compile-fail ../no_mem_templates_fail.cpp ] ; +test-suite "BOOST_NO_MEMBER_TEMPLATE_FRIENDS" : +[ run ../no_mem_templ_frnds_pass.cpp ] +[ compile-fail ../no_mem_templ_frnds_fail.cpp ] ; +test-suite "BOOST_NO_MEMBER_TEMPLATE_KEYWORD" : +[ run ../no_mem_tem_keyword_pass.cpp ] +[ compile-fail ../no_mem_tem_keyword_fail.cpp ] ; +test-suite "BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS" : +[ run ../no_mem_tem_pnts_pass.cpp ] +[ compile-fail ../no_mem_tem_pnts_fail.cpp ] ; +test-suite "BOOST_NO_NESTED_FRIENDSHIP" : +[ run ../no_nested_friendship_pass.cpp ] +[ compile-fail ../no_nested_friendship_fail.cpp ] ; +test-suite "BOOST_NO_NULLPTR" : +[ run ../no_nullptr_pass.cpp ] +[ compile-fail ../no_nullptr_fail.cpp ] ; +test-suite "BOOST_NO_OPERATORS_IN_NAMESPACE" : +[ run ../no_ops_in_namespace_pass.cpp ] +[ compile-fail ../no_ops_in_namespace_fail.cpp ] ; +test-suite "BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION" : +[ run ../no_partial_spec_pass.cpp ] +[ compile-fail ../no_partial_spec_fail.cpp ] ; +test-suite "BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS" : +[ run ../no_part_spec_def_args_pass.cpp ] +[ compile-fail ../no_part_spec_def_args_fail.cpp ] ; +test-suite "BOOST_NO_PRIVATE_IN_AGGREGATE" : +[ run ../no_priv_aggregate_pass.cpp ] +[ compile-fail ../no_priv_aggregate_fail.cpp ] ; +test-suite "BOOST_NO_POINTER_TO_MEMBER_CONST" : +[ run ../no_ptr_mem_const_pass.cpp ] +[ compile-fail ../no_ptr_mem_const_fail.cpp ] ; +test-suite "BOOST_NO_RAW_LITERALS" : +[ run ../no_raw_literals_pass.cpp ] +[ compile-fail ../no_raw_literals_fail.cpp ] ; +test-suite "BOOST_NO_UNREACHABLE_RETURN_DETECTION" : +[ run ../no_ret_det_pass.cpp ] +[ compile-fail ../no_ret_det_fail.cpp ] ; +test-suite "BOOST_NO_RTTI" : +[ run ../no_rtti_pass.cpp ] +[ compile-fail ../no_rtti_fail.cpp ] ; +test-suite "BOOST_NO_RVALUE_REFERENCES" : +[ run ../no_rvalue_references_pass.cpp ] +[ compile-fail ../no_rvalue_references_fail.cpp ] ; +test-suite "BOOST_NO_SCOPED_ENUMS" : +[ run ../no_scoped_enums_pass.cpp ] +[ compile-fail ../no_scoped_enums_fail.cpp ] ; +test-suite "BOOST_NO_SFINAE" : +[ run ../no_sfinae_pass.cpp ] +[ compile-fail ../no_sfinae_fail.cpp ] ; +test-suite "BOOST_NO_SFINAE_EXPR" : +[ run ../no_sfinae_expr_pass.cpp ] +[ compile-fail ../no_sfinae_expr_fail.cpp ] ; +test-suite "BOOST_NO_STRINGSTREAM" : +[ run ../no_sstream_pass.cpp ] +[ compile-fail ../no_sstream_fail.cpp ] ; +test-suite "BOOST_NO_STATIC_ASSERT" : +[ run ../no_static_assert_pass.cpp ] +[ compile-fail ../no_static_assert_fail.cpp ] ; +test-suite "BOOST_NO_STDC_NAMESPACE" : +[ run ../no_stdc_namespace_pass.cpp ] +[ compile-fail ../no_stdc_namespace_fail.cpp ] ; +test-suite "BOOST_NO_STD_ALLOCATOR" : +[ run ../no_std_allocator_pass.cpp ] +[ compile-fail ../no_std_allocator_fail.cpp ] ; +test-suite "BOOST_NO_STD_DISTANCE" : +[ run ../no_std_distance_pass.cpp ] +[ compile-fail ../no_std_distance_fail.cpp ] ; +test-suite "BOOST_NO_STD_ITERATOR" : +[ run ../no_std_iterator_pass.cpp ] +[ compile-fail ../no_std_iterator_fail.cpp ] ; +test-suite "BOOST_NO_STD_ITERATOR_TRAITS" : +[ run ../no_std_iter_traits_pass.cpp ] +[ compile-fail ../no_std_iter_traits_fail.cpp ] ; +test-suite "BOOST_NO_STD_LOCALE" : +[ run ../no_std_locale_pass.cpp ] +[ compile-fail ../no_std_locale_fail.cpp ] ; +test-suite "BOOST_NO_STD_MESSAGES" : +[ run ../no_std_messages_pass.cpp ] +[ compile-fail ../no_std_messages_fail.cpp ] ; +test-suite "BOOST_NO_STD_MIN_MAX" : +[ run ../no_std_min_max_pass.cpp ] +[ compile-fail ../no_std_min_max_fail.cpp ] ; +test-suite "BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN" : +[ run ../no_std_oi_assign_pass.cpp ] +[ compile-fail ../no_std_oi_assign_fail.cpp ] ; +test-suite "BOOST_NO_STD_TYPEINFO" : +[ run ../no_std_typeinfo_pass.cpp ] +[ compile-fail ../no_std_typeinfo_fail.cpp ] ; +test-suite "BOOST_NO_STD_UNORDERED" : +[ run ../no_std_unordered_pass.cpp ] +[ compile-fail ../no_std_unordered_fail.cpp ] ; +test-suite "BOOST_NO_STD_USE_FACET" : +[ run ../no_std_use_facet_pass.cpp ] +[ compile-fail ../no_std_use_facet_fail.cpp ] ; +test-suite "BOOST_NO_STD_WSTREAMBUF" : +[ run ../no_std_wstreambuf_pass.cpp ] +[ compile-fail ../no_std_wstreambuf_fail.cpp ] ; +test-suite "BOOST_NO_STD_WSTRING" : +[ run ../no_std_wstring_pass.cpp ] +[ compile-fail ../no_std_wstring_fail.cpp ] ; +test-suite "BOOST_NO_SWPRINTF" : +[ run ../no_swprintf_pass.cpp ] +[ compile-fail ../no_swprintf_fail.cpp ] ; +test-suite "BOOST_NO_TEMPLATE_ALIASES" : +[ run ../no_template_aliases_pass.cpp ] +[ compile-fail ../no_template_aliases_fail.cpp ] ; +test-suite "BOOST_NO_TEMPLATED_IOSTREAMS" : +[ run ../no_template_streams_pass.cpp ] +[ compile-fail ../no_template_streams_fail.cpp ] ; +test-suite "BOOST_NO_TEMPLATE_TEMPLATES" : +[ run ../no_template_template_pass.cpp ] +[ compile-fail ../no_template_template_fail.cpp ] ; +test-suite "BOOST_NO_TWO_PHASE_NAME_LOOKUP" : +[ run ../no_two_phase_lookup_pass.cpp ] +[ compile-fail ../no_two_phase_lookup_fail.cpp ] ; +test-suite "BOOST_NO_TYPEID" : +[ run ../no_typeid_pass.cpp ] +[ compile-fail ../no_typeid_fail.cpp ] ; +test-suite "BOOST_NO_TYPENAME_WITH_CTOR" : +[ run ../no_typename_with_ctor_pass.cpp ] +[ compile-fail ../no_typename_with_ctor_fail.cpp ] ; +test-suite "BOOST_NO_UNICODE_LITERALS" : +[ run ../no_unicode_literals_pass.cpp ] +[ compile-fail ../no_unicode_literals_fail.cpp ] ; +test-suite "BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL" : +[ run ../no_using_breaks_adl_pass.cpp ] +[ compile-fail ../no_using_breaks_adl_fail.cpp ] ; +test-suite "BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE" : +[ run ../no_using_decl_overld_pass.cpp ] +[ compile-fail ../no_using_decl_overld_fail.cpp ] ; +test-suite "BOOST_NO_USING_TEMPLATE" : +[ run ../no_using_template_pass.cpp ] +[ compile-fail ../no_using_template_fail.cpp ] ; +test-suite "BOOST_NO_VARIADIC_TEMPLATES" : +[ run ../no_variadic_templates_pass.cpp ] +[ compile-fail ../no_variadic_templates_fail.cpp ] ; +test-suite "BOOST_NO_VOID_RETURNS" : +[ run ../no_void_returns_pass.cpp ] +[ compile-fail ../no_void_returns_fail.cpp ] ; +test-suite "BOOST_NO_INTRINSIC_WCHAR_T" : +[ run ../no_wchar_t_pass.cpp ] +[ compile-fail ../no_wchar_t_fail.cpp ] ; + ======================================= --- /dev/null +++ /trunk/libs/config/test/all/options_v2.jam Fri May 28 00:05:44 2010 @@ -0,0 +1,12 @@ +# copyright John Maddock 2003 +# Use, modification and distribution are subject to the +# Boost Software License, Version 1.0. (See accompanying file +# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +project + : requirements + # threading tests require thread support turned on: + <threading>multi + ; ++local test-requirements = <library>../../test/build//boost_test_exec_monitor ;
======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_array.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_ARRAY +// TITLE: C++0x header <array> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <array>
+ +#include <array> + +namespace boost_no_0x_hdr_array { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_chrono.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_CHRONO +// TITLE: C++0x header <chrono> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <chrono>
+ +#include <chrono> + +namespace boost_no_0x_hdr_chrono { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_codecvt.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_CODECVT +// TITLE: C++0x header <codecvt> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <codecvt>
+ +#include <codecvt> + +namespace boost_no_0x_hdr_codecvt { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_concepts.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_CONCEPTS +// TITLE: C++0x header <concepts> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <concepts>
+ +#include <concepts> + +namespace boost_no_0x_hdr_concepts { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_condition_variable.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_CONDITION_VARIABLE +// TITLE: C++0x header <condition_variable> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <condition_variable>
+ +#include <condition_variable> + +namespace boost_no_0x_hdr_condition_variable { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_container_concepts.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_CONTAINER_CONCEPTS +// TITLE: C++0x header <container_concepts> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <container_concepts>
+ +#include <container_concepts> + +namespace boost_no_0x_hdr_container_concepts { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_forward_list.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_FORWARD_LIST +// TITLE: C++0x header <forward_list> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <forward_list>
+ +#include <forward_list> + +namespace boost_no_0x_hdr_forward_list { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_future.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_FUTURE +// TITLE: C++0x header <future> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <future>
+ +#include <future> + +namespace boost_no_0x_hdr_future { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_initializer_list.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_INITIALIZER_LIST +// TITLE: C++0x header <initializer_list> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <initializer_list>
+ +#include <initializer_list> + +namespace boost_no_0x_hdr_initializer_list { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_iterator_concepts.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_ITERATOR_CONCEPTS +// TITLE: C++0x header <iterator_concepts> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <iterator_concepts>
+ +#include <iterator_concepts> + +namespace boost_no_0x_hdr_iterator_concepts { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_memory_concepts.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_MEMORY_CONCEPTS +// TITLE: C++0x header <memory_concepts> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <memory_concepts>
+ +#include <memory_concepts> + +namespace boost_no_0x_hdr_memory_concepts { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_mutex.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_MUTEX +// TITLE: C++0x header <mutex> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <mutex>
+ +#include <mutex> + +namespace boost_no_0x_hdr_mutex { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_random.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_RANDOM +// TITLE: C++0x header <random> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <random>
+ +#include <random> + +namespace boost_no_0x_hdr_random { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_ratio.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_RATIO +// TITLE: C++0x header <ratio> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <ratio>
+ +#include <ratio> + +namespace boost_no_0x_hdr_ratio { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_regex.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_REGEX +// TITLE: C++0x header <regex> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <regex>
+ +#include <regex> + +namespace boost_no_0x_hdr_regex { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_system_error.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_SYSTEM_ERROR +// TITLE: C++0x header <system_error> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <system_error>
+ +#include <system_error> + +namespace boost_no_0x_hdr_system_error { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_thread.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_THREAD +// TITLE: C++0x header <thread> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <thread>
+ +#include <thread> + +namespace boost_no_0x_hdr_thread { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_tuple.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_TUPLE +// TITLE: C++0x header <tuple> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <tuple>
+ +#include <tuple> + +namespace boost_no_0x_hdr_tuple { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_type_traits.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_TYPE_TRAITS +// TITLE: C++0x header <type_traits> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <type_traits>
+ +#include <type_traits> + +namespace boost_no_0x_hdr_type_traits { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_unordered_map.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_UNORDERED_MAP +// TITLE: C++0x header <unordered_map> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <unordered_map>
+ +#include <unordered_map> + +namespace boost_no_0x_hdr_unordered_map { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_0x_hdr_unordered_set.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_0X_HDR_UNORDERED_SET +// TITLE: C++0x header <unordered_set> unavailable+// DESCRIPTION: The standard library does not supply C++0x header <unordered_set>
+ +#include <unordered_set> + +namespace boost_no_0x_hdr_unordered_set { + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_auto_declarations.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,25 @@ +// Copyright (C) 2009 Andrey Semashev +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_NO_AUTO_DECLARATIONS +// TITLE: C++0x auto declarators unavailable+// DESCRIPTION: The compiler does not support C++0x declarations of variables with automatically deduced type
+ +namespace boost_no_auto_declarations { + +void check(int& x) +{ +} + +int test() +{ + auto x = 10; + check(x); + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_auto_multidecl.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,25 @@ +// Copyright (C) 2009 Andrey Semashev +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for most recent version. + +// MACRO: BOOST_NO_AUTO_MULTIDECLARATIONS +// TITLE: C++0x auto multideclarators unavailable+// DESCRIPTION: The compiler does not support C++0x declarations of series of variables with automatically deduced type
+ +namespace boost_no_auto_multideclarations { + +void check(int& x, int*& y) +{ +} + +int test() +{ + auto x = 10, *y = &x; + check(x, y); + return 0; +} + +} ======================================= --- /dev/null +++ /trunk/libs/config/test/boost_no_char16_t.ipp Fri May 28 00:05:44 2010 @@ -0,0 +1,21 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CHAR16_T +// TITLE: C++0x char16_t unavailable +// DESCRIPTION: The compiler does not support C++0x char16_t + +namespace boost_no_char16_t { + +int test() +{ + char16_t c; + return 0; +} + +} ======================================= --- /dev/null +++ /trunk/libs/config/test/boost_no_char32_t.ipp Fri May 28 00:05:44 2010 @@ -0,0 +1,21 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CHAR32_T +// TITLE: C++0x char32_t unavailable +// DESCRIPTION: The compiler does not support C++0x char32_t + +namespace boost_no_char32_t { + +int test() +{ + char32_t c; + return 0; +} + +} ======================================= --- /dev/null +++ /trunk/libs/config/test/boost_no_concepts.ipp Fri May 28 00:05:44 2010 @@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2009 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CONCEPTS +// TITLE: C++0x concepts feature unavailable +// DESCRIPTION: The compiler does not support the C++0x concepts feature + +namespace boost_no_concepts { + +concept Foo<typename T> { } + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null +++ /trunk/libs/config/test/boost_no_constexpr.ipp Fri May 28 00:05:44 2010 @@ -0,0 +1,23 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_CONSTEXPR +// TITLE: C++0x constexpr unavailable +// DESCRIPTION: The compiler does not support C++0x constexpr + +namespace boost_no_constexpr { + +constexpr int square(int x) { return x * x; } // from N2235 + +int test() +{ + int i = square(5); + return 0; +} + +} ======================================= --- /dev/null +++ /trunk/libs/config/test/boost_no_decltype.ipp Fri May 28 00:05:44 2010 @@ -0,0 +1,22 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_DECLTYPE +// TITLE: C++0x decltype unavailable +// DESCRIPTION: The compiler does not support C++0x decltype + +namespace boost_no_decltype { + +int test() +{ + int i; + decltype(i) j; + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_defaulted_functions.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,24 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_DEFAULTED_FUNCTIONS +// TITLE: C++0x defaulted functions unavailable +// DESCRIPTION: The compiler does not support C++0x defaulted functions + +namespace boost_no_defaulted_functions { + + struct foo { + foo() = default; + }; + +int test() +{ + return 0; +} + +} ======================================= --- /dev/null+++ /trunk/libs/config/test/boost_no_deleted_functions.ipp Fri May 28 00:05:44 2010
@@ -0,0 +1,24 @@ +// (C) Copyright Beman Dawes 2008 + +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/libs/config for more information. + +// MACRO: BOOST_NO_DELETED_FUNCTIONS +// TITLE: C++0x =delete functions unavailable +// DESCRIPTION: The compiler does not support C++0x =delete functions + +namespace boost_no_deleted_functions { + + struct foo { + foo() = delete; + }; + +int test() +{ + return 0; +} + +} ======================================= ***Additional files exist in this changeset.***