Index: clangd/StdSymbolMap.inc =================================================================== --- clangd/StdSymbolMap.inc +++ clangd/StdSymbolMap.inc @@ -0,0 +1,1226 @@ +//===-- gen_std.py generated file -------------------------------*- C++ -*-===// +// +// Used to build a lookup table (qualified names => include headers) for C++ +// Standard Library symbols. +// +// Automatically generated file, DO NOT EDIT! +// +// Generated from cppreference offline HTML book (modified on 2018-10-28). +//===----------------------------------------------------------------------===// + +SYMBOL(Assignable, std::, ) +SYMBOL(Boolean, std::, ) +SYMBOL(Common, std::, ) +SYMBOL(CommonReference, std::, ) +SYMBOL(Constructible, std::, ) +SYMBOL(ConvertibleTo, std::, ) +SYMBOL(CopyConstructible, std::, ) +SYMBOL(Copyable, std::, ) +SYMBOL(DefaultConstructible, std::, ) +SYMBOL(DerivedFrom, std::, ) +SYMBOL(Destructible, std::, ) +SYMBOL(EqualityComparable, std::, ) +SYMBOL(EqualityComparableWith, std::, ) +SYMBOL(FILE, std::, ) +SYMBOL(Integral, std::, ) +SYMBOL(Invocable, std::, ) +SYMBOL(Movable, std::, ) +SYMBOL(MoveConstructible, std::, ) +SYMBOL(Predicate, std::, ) +SYMBOL(Regular, std::, ) +SYMBOL(RegularInvocable, std::, ) +SYMBOL(Relation, std::, ) +SYMBOL(Same, std::, ) +SYMBOL(Semiregular, std::, ) +SYMBOL(SignedIntegral, std::, ) +SYMBOL(StrictTotallyOrdered, std::, ) +SYMBOL(StrictTotallyOrderedWith, std::, ) +SYMBOL(StrictWeakOrder, std::, ) +SYMBOL(Swappable, std::, ) +SYMBOL(SwappableWith, std::, ) +SYMBOL(UniformRandomBitGenerator, std::, ) +SYMBOL(UnsignedIntegral, std::, ) +SYMBOL(_Exit, std::, ) +SYMBOL(accumulate, std::, ) +SYMBOL(add_const, std::, ) +SYMBOL(add_const_t, std::, ) +SYMBOL(add_cv, std::, ) +SYMBOL(add_cv_t, std::, ) +SYMBOL(add_lvalue_reference, std::, ) +SYMBOL(add_lvalue_reference_t, std::, ) +SYMBOL(add_pointer, std::, ) +SYMBOL(add_pointer_t, std::, ) +SYMBOL(add_rvalue_reference, std::, ) +SYMBOL(add_rvalue_reference_t, std::, ) +SYMBOL(add_volatile, std::, ) +SYMBOL(add_volatile_t, std::, ) +SYMBOL(addressof, std::, ) +SYMBOL(adjacent_difference, std::, ) +SYMBOL(adjacent_find, std::, ) +SYMBOL(adopt_lock, std::, ) +SYMBOL(adopt_lock_t, std::, ) +SYMBOL(advance, std::, ) +SYMBOL(align, std::, ) +SYMBOL(align_val_t, std::, ) +SYMBOL(aligned_alloc, std::, ) +SYMBOL(aligned_storage, std::, ) +SYMBOL(aligned_storage_t, std::, ) +SYMBOL(aligned_union, std::, ) +SYMBOL(aligned_union_t, std::, ) +SYMBOL(alignment_of, std::, ) +SYMBOL(alignment_of_v, std::, ) +SYMBOL(all_of, std::, ) +SYMBOL(allocate_shared, std::, ) +SYMBOL(allocator, std::, ) +SYMBOL(allocator_arg, std::, ) +SYMBOL(allocator_arg_t, std::, ) +SYMBOL(allocator_traits, std::, ) +SYMBOL(any, std::, ) +SYMBOL(any_of, std::, ) +SYMBOL(apply, std::, ) +SYMBOL(arg, std::, ) +SYMBOL(array, std::, ) +SYMBOL(as_const, std::, ) +SYMBOL(asctime, std::, ) +SYMBOL(async, std::, ) +SYMBOL(at_quick_exit, std::, ) +SYMBOL(atexit, std::, ) +SYMBOL(atof, std::, ) +SYMBOL(atoi, std::, ) +SYMBOL(atol, std::, ) +SYMBOL(atoll, std::, ) +SYMBOL(atomic_compare_exchange_strong, std::, ) +SYMBOL(atomic_compare_exchange_strong_explicit, std::, ) +SYMBOL(atomic_compare_exchange_weak, std::, ) +SYMBOL(atomic_compare_exchange_weak_explicit, std::, ) +SYMBOL(atomic_exchange, std::, ) +SYMBOL(atomic_exchange_explicit, std::, ) +SYMBOL(atomic_fetch_add, std::, ) +SYMBOL(atomic_fetch_add_explicit, std::, ) +SYMBOL(atomic_fetch_and, std::, ) +SYMBOL(atomic_fetch_and_explicit, std::, ) +SYMBOL(atomic_fetch_or, std::, ) +SYMBOL(atomic_fetch_or_explicit, std::, ) +SYMBOL(atomic_fetch_sub, std::, ) +SYMBOL(atomic_fetch_sub_explicit, std::, ) +SYMBOL(atomic_fetch_xor, std::, ) +SYMBOL(atomic_fetch_xor_explicit, std::, ) +SYMBOL(atomic_flag, std::, ) +SYMBOL(atomic_flag_clear, std::, ) +SYMBOL(atomic_flag_clear_explicit, std::, ) +SYMBOL(atomic_flag_test_and_set, std::, ) +SYMBOL(atomic_flag_test_and_set_explicit, std::, ) +SYMBOL(atomic_init, std::, ) +SYMBOL(atomic_is_lockfree, std::, ) +SYMBOL(atomic_load, std::, ) +SYMBOL(atomic_load_explicit, std::, ) +SYMBOL(atomic_ref, std::, ) +SYMBOL(atomic_signal_fence, std::, ) +SYMBOL(atomic_store, std::, ) +SYMBOL(atomic_store_explicit, std::, ) +SYMBOL(atomic_thread_fence, std::, ) +SYMBOL(atto, std::, ) +SYMBOL(auto_ptr, std::, ) +SYMBOL(back_insert_iterator, std::, ) +SYMBOL(back_inserter, std::, ) +SYMBOL(bad_alloc, std::, ) +SYMBOL(bad_any_cast, std::, ) +SYMBOL(bad_array_new_length, std::, ) +SYMBOL(bad_cast, std::, ) +SYMBOL(bad_exception, std::, ) +SYMBOL(bad_function_call, std::, ) +SYMBOL(bad_optional_access, std::, ) +SYMBOL(bad_typeid, std::, ) +SYMBOL(bad_variant_access, std::, ) +SYMBOL(bad_weak_ptr, std::, ) +SYMBOL(basic_common_reference, std::, ) +SYMBOL(basic_fstream, std::, ) +SYMBOL(basic_ifstream, std::, ) +SYMBOL(basic_ios, std::, ) +SYMBOL(basic_iostream, std::, ) +SYMBOL(basic_istringstream, std::, ) +SYMBOL(basic_ofstream, std::, ) +SYMBOL(basic_ostringstream, std::, ) +SYMBOL(basic_osyncstream, std::, ) +SYMBOL(basic_regex, std::, ) +SYMBOL(basic_streambuf, std::, ) +SYMBOL(basic_string, std::, ) +SYMBOL(basic_string_view, std::, ) +SYMBOL(basic_stringbuf, std::, ) +SYMBOL(basic_stringstream, std::, ) +SYMBOL(basic_syncbuf, std::, ) +SYMBOL(begin, std::, ) +SYMBOL(bernoulli_distribution, std::, ) +SYMBOL(bidirectional_iterator_tag, std::, ) +SYMBOL(binary_search, std::, ) +SYMBOL(bind, std::, ) +SYMBOL(binomial_distribution, std::, ) +SYMBOL(bit_and, std::, ) +SYMBOL(bit_cast, std::, ) +SYMBOL(bit_not, std::, ) +SYMBOL(bit_or, std::, ) +SYMBOL(bit_xor, std::, ) +SYMBOL(bitset, std::, ) +SYMBOL(bool_constant, std::, ) +SYMBOL(boolalpha, std::, ) +SYMBOL(boyer_moore_horspool_searcher, std::, ) +SYMBOL(boyer_moore_searcher, std::, ) +SYMBOL(bsearch, std::, ) +SYMBOL(btowc, std::, ) +SYMBOL(byte, std::, ) +SYMBOL(c16rtomb, std::, ) +SYMBOL(c32rtomb, std::, ) +SYMBOL(call_once, std::, ) +SYMBOL(calloc, std::, ) +SYMBOL(cauchy_distribution, std::, ) +SYMBOL(cbegin, std::, ) +SYMBOL(cbrt, std::, ) +SYMBOL(ceil, std::, ) +SYMBOL(ceil2, std::, ) +SYMBOL(cend, std::, ) +SYMBOL(centi, std::, ) +SYMBOL(cerr, std::, ) +SYMBOL(char_traits, std::, ) +SYMBOL(chars_format, std::, ) +SYMBOL(chi_squared_distribution, std::, ) +SYMBOL(cin, std::, ) +SYMBOL(clamp, std::, ) +SYMBOL(clearerr, std::, ) +SYMBOL(clock, std::, ) +SYMBOL(clock_t, std::, ) +SYMBOL(clog, std::, ) +SYMBOL(cmatch, std::, ) +SYMBOL(codecvt, std::, ) +SYMBOL(codecvt_base, std::, ) +SYMBOL(codecvt_byname, std::, ) +SYMBOL(codecvt_utf16, std::, ) +SYMBOL(codecvt_utf8, std::, ) +SYMBOL(codecvt_utf8_utf16, std::, ) +SYMBOL(collate, std::, ) +SYMBOL(collate_byname, std::, ) +SYMBOL(common_comparison_category, std::, ) +SYMBOL(common_comparison_category_t, std::, ) +SYMBOL(common_reference, std::, ) +SYMBOL(common_reference_t, std::, ) +SYMBOL(common_type, std::, ) +SYMBOL(common_type_t, std::, ) +SYMBOL(compare_3way, std::, ) +SYMBOL(complex, std::, ) +SYMBOL(condition_variable, std::, ) +SYMBOL(condition_variable_any, std::, ) +SYMBOL(conditional, std::, ) +SYMBOL(conditional_t, std::, ) +SYMBOL(conj, std::, ) +SYMBOL(conjunction, std::, ) +SYMBOL(conjunction_v, std::, ) +SYMBOL(const_pointer_cast, std::, ) +SYMBOL(contract_violation, std::, ) +SYMBOL(copy, std::, ) +SYMBOL(copy_backward, std::, ) +SYMBOL(copy_if, std::, ) +SYMBOL(copy_n, std::, ) +SYMBOL(copysign, std::, ) +SYMBOL(count, std::, ) +SYMBOL(count_if, std::, ) +SYMBOL(cout, std::, ) +SYMBOL(crbegin, std::, ) +SYMBOL(cref, std::, ) +SYMBOL(cregex_iterator, std::, ) +SYMBOL(cregex_token_iterator, std::, ) +SYMBOL(crend, std::, ) +SYMBOL(csub_match, std::, ) +SYMBOL(ctime, std::, ) +SYMBOL(ctype, std::, ) +SYMBOL(ctype_base, std::, ) +SYMBOL(ctype_byname, std::, ) +SYMBOL(current_exception, std::, ) +SYMBOL(cv_status, std::, ) +SYMBOL(data, std::, ) +SYMBOL(dec, std::, ) +SYMBOL(deca, std::, ) +SYMBOL(decay, std::, ) +SYMBOL(decay_t, std::, ) +SYMBOL(deci, std::, ) +SYMBOL(declare_no_pointers, std::, ) +SYMBOL(declare_reachable, std::, ) +SYMBOL(declval, std::, ) +SYMBOL(default_delete, std::, ) +SYMBOL(default_searcher, std::, ) +SYMBOL(defaultfloat, std::, ) +SYMBOL(defer_lock, std::, ) +SYMBOL(defer_lock_t, std::, ) +SYMBOL(denorm_absent, std::, ) +SYMBOL(denorm_indeterminate, std::, ) +SYMBOL(denorm_present, std::, ) +SYMBOL(deque, std::, ) +SYMBOL(destroy, std::, ) +SYMBOL(destroy_at, std::, ) +SYMBOL(destroy_n, std::, ) +SYMBOL(destroying_delete, std::, ) +SYMBOL(destroying_delete_t, std::, ) +SYMBOL(difftime, std::, ) +SYMBOL(discard_block_engine, std::, ) +SYMBOL(discrete_distribution, std::, ) +SYMBOL(disjunction, std::, ) +SYMBOL(disjunction_v, std::, ) +SYMBOL(distance, std::, ) +SYMBOL(divides, std::, ) +SYMBOL(domain_error, std::, ) +SYMBOL(dynamic_extent, std::, ) +SYMBOL(dynamic_pointer_cast, std::, ) +SYMBOL(emit_on_flush, std::, ) +SYMBOL(empty, std::, ) +SYMBOL(enable_if, std::, ) +SYMBOL(enable_if_t, std::, ) +SYMBOL(enable_shared_from_this, std::, ) +SYMBOL(end, std::, ) +SYMBOL(endian, std::, ) +SYMBOL(endl, std::, ) +SYMBOL(ends, std::, ) +SYMBOL(equal, std::, ) +SYMBOL(equal_range, std::, ) +SYMBOL(equal_to, std::, ) +SYMBOL(erf, std::, ) +SYMBOL(erfc, std::, ) +SYMBOL(errc, std::, ) +SYMBOL(error_category, std::, ) +SYMBOL(error_code, std::, ) +SYMBOL(error_condition, std::, ) +SYMBOL(exa, std::, ) +SYMBOL(exception, std::, ) +SYMBOL(exception_ptr, std::, ) +SYMBOL(exchange, std::, ) +SYMBOL(exclusive_scan, std::, ) +SYMBOL(exit, std::, ) +SYMBOL(exp2, std::, ) +SYMBOL(expm1, std::, ) +SYMBOL(exponential_distribution, std::, ) +SYMBOL(extent, std::, ) +SYMBOL(extent_v, std::, ) +SYMBOL(extreme_value_distribution, std::, ) +SYMBOL(false_type, std::, ) +SYMBOL(fclose, std::, ) +SYMBOL(fdim, std::, ) +SYMBOL(feclearexcept, std::, ) +SYMBOL(fegetenv, std::, ) +SYMBOL(fegetexceptflag, std::, ) +SYMBOL(fegetround, std::, ) +SYMBOL(feholdexcept, std::, ) +SYMBOL(femto, std::, ) +SYMBOL(fenv_t, std::, ) +SYMBOL(feof, std::, ) +SYMBOL(feraiseexcept, std::, ) +SYMBOL(ferror, std::, ) +SYMBOL(fesetenv, std::, ) +SYMBOL(fesetexceptflag, std::, ) +SYMBOL(fesetround, std::, ) +SYMBOL(fetestexcept, std::, ) +SYMBOL(feupdateenv, std::, ) +SYMBOL(fexcept_t, std::, ) +SYMBOL(fflush, std::, ) +SYMBOL(fgetc, std::, ) +SYMBOL(fgetpos, std::, ) +SYMBOL(fgets, std::, ) +SYMBOL(fgetwc, std::, ) +SYMBOL(fgetws, std::, ) +SYMBOL(fill, std::, ) +SYMBOL(fill_n, std::, ) +SYMBOL(find, std::, ) +SYMBOL(find_end, std::, ) +SYMBOL(find_first_of, std::, ) +SYMBOL(find_if, std::, ) +SYMBOL(find_if_not, std::, ) +SYMBOL(fisher_f_distribution, std::, ) +SYMBOL(fixed, std::, ) +SYMBOL(float_denorm_style, std::, ) +SYMBOL(float_round_style, std::, ) +SYMBOL(floor, std::, ) +SYMBOL(floor2, std::, ) +SYMBOL(flush, std::, ) +SYMBOL(flush_emit, std::, ) +SYMBOL(fma, std::, ) +SYMBOL(fmax, std::, ) +SYMBOL(fmin, std::, ) +SYMBOL(fmod, std::, ) +SYMBOL(fopen, std::, ) +SYMBOL(for_each, std::, ) +SYMBOL(for_each_n, std::, ) +SYMBOL(forward, std::, ) +SYMBOL(forward_as_tuple, std::, ) +SYMBOL(forward_iterator_tag, std::, ) +SYMBOL(forward_list, std::, ) +SYMBOL(fpclassify, std::, ) +SYMBOL(fpos, std::, ) +SYMBOL(fpos_t, std::, ) +SYMBOL(fprintf, std::, ) +SYMBOL(fputc, std::, ) +SYMBOL(fputs, std::, ) +SYMBOL(fputwc, std::, ) +SYMBOL(fputws, std::, ) +SYMBOL(fread, std::, ) +SYMBOL(free, std::, ) +SYMBOL(freopen, std::, ) +SYMBOL(frexp, std::, ) +SYMBOL(from_chars, std::, ) +SYMBOL(front_insert_iterator, std::, ) +SYMBOL(front_inserter, std::, ) +SYMBOL(fscanf, std::, ) +SYMBOL(fseek, std::, ) +SYMBOL(fsetpos, std::, ) +SYMBOL(fstream, std::, ) +SYMBOL(ftell, std::, ) +SYMBOL(function, std::, ) +SYMBOL(future, std::, ) +SYMBOL(future_category, std::, ) +SYMBOL(future_errc, std::, ) +SYMBOL(future_error, std::, ) +SYMBOL(future_status, std::, ) +SYMBOL(fwide, std::, ) +SYMBOL(fwprintf, std::, ) +SYMBOL(fwrite, std::, ) +SYMBOL(fwscanf, std::, ) +SYMBOL(gamma_distribution, std::, ) +SYMBOL(gcd, std::, ) +SYMBOL(generate, std::, ) +SYMBOL(generate_canonical, std::, ) +SYMBOL(generate_n, std::, ) +SYMBOL(generic_category, std::, ) +SYMBOL(geometric_distribution, std::, ) +SYMBOL(get_if, std::, ) +SYMBOL(get_money, std::, ) +SYMBOL(get_new_handler, std::, ) +SYMBOL(get_pointer_safety, std::, ) +SYMBOL(get_terminate, std::, ) +SYMBOL(get_time, std::, ) +SYMBOL(getc, std::, ) +SYMBOL(getchar, std::, ) +SYMBOL(getenv, std::, ) +SYMBOL(gets, std::, ) +SYMBOL(getwc, std::, ) +SYMBOL(getwchar, std::, ) +SYMBOL(giga, std::, ) +SYMBOL(gmtime, std::, ) +SYMBOL(greater, std::, ) +SYMBOL(greater_equal, std::, ) +SYMBOL(gslice, std::, ) +SYMBOL(gslice_array, std::, ) +SYMBOL(hardware_constructive_interference_size, std::, ) +SYMBOL(hardware_destructive_interference_size, std::, ) +SYMBOL(has_facet, std::, ) +SYMBOL(has_unique_object_representations, std::, ) +SYMBOL(has_unique_object_representations_v, std::, ) +SYMBOL(has_virtual_destructor, std::, ) +SYMBOL(has_virtual_destructor_v, std::, ) +SYMBOL(hash, std::, ) +SYMBOL(hecto, std::, ) +SYMBOL(hex, std::, ) +SYMBOL(hexfloat, std::, ) +SYMBOL(holds_alternative, std::, ) +SYMBOL(hypot, std::, ) +SYMBOL(identity, std::, ) +SYMBOL(ifstream, std::, ) +SYMBOL(ignore, std::, ) +SYMBOL(ilogb, std::, ) +SYMBOL(imag, std::, ) +SYMBOL(in_place, std::, ) +SYMBOL(in_place_index, std::, ) +SYMBOL(in_place_index_t, std::, ) +SYMBOL(in_place_t, std::, ) +SYMBOL(in_place_type, std::, ) +SYMBOL(in_place_type_t, std::, ) +SYMBOL(includes, std::, ) +SYMBOL(inclusive_scan, std::, ) +SYMBOL(independent_bits_engine, std::, ) +SYMBOL(indirect_array, std::, ) +SYMBOL(inner_product, std::, ) +SYMBOL(inplace_merge, std::, ) +SYMBOL(input_iterator_tag, std::, ) +SYMBOL(insert_iterator, std::, ) +SYMBOL(inserter, std::, ) +SYMBOL(integer_sequence, std::, ) +SYMBOL(integral_constant, std::, ) +SYMBOL(internal, std::, ) +SYMBOL(invalid_argument, std::, ) +SYMBOL(invoke, std::, ) +SYMBOL(invoke_result, std::, ) +SYMBOL(invoke_result_t, std::, ) +SYMBOL(io_errc, std::, ) +SYMBOL(ios, std::, ) +SYMBOL(ios_base, std::, ) +SYMBOL(iostream, std::, ) +SYMBOL(iostream_category, std::, ) +SYMBOL(iota, std::, ) +SYMBOL(is_abstract, std::, ) +SYMBOL(is_abstract_v, std::, ) +SYMBOL(is_aggregate, std::, ) +SYMBOL(is_aggregate_v, std::, ) +SYMBOL(is_arithmetic, std::, ) +SYMBOL(is_arithmetic_v, std::, ) +SYMBOL(is_array, std::, ) +SYMBOL(is_array_v, std::, ) +SYMBOL(is_assignable, std::, ) +SYMBOL(is_assignable_v, std::, ) +SYMBOL(is_base_of, std::, ) +SYMBOL(is_base_of_v, std::, ) +SYMBOL(is_bind_expression, std::, ) +SYMBOL(is_bind_expression_v, std::, ) +SYMBOL(is_class, std::, ) +SYMBOL(is_class_v, std::, ) +SYMBOL(is_compound, std::, ) +SYMBOL(is_compound_v, std::, ) +SYMBOL(is_const, std::, ) +SYMBOL(is_const_v, std::, ) +SYMBOL(is_constructible, std::, ) +SYMBOL(is_constructible_v, std::, ) +SYMBOL(is_convertible, std::, ) +SYMBOL(is_convertible_v, std::, ) +SYMBOL(is_copy_assignable, std::, ) +SYMBOL(is_copy_assignable_v, std::, ) +SYMBOL(is_copy_constructible, std::, ) +SYMBOL(is_copy_constructible_v, std::, ) +SYMBOL(is_default_constructible, std::, ) +SYMBOL(is_default_constructible_v, std::, ) +SYMBOL(is_destructible, std::, ) +SYMBOL(is_destructible_v, std::, ) +SYMBOL(is_empty, std::, ) +SYMBOL(is_empty_v, std::, ) +SYMBOL(is_enum, std::, ) +SYMBOL(is_enum_v, std::, ) +SYMBOL(is_eq, std::, ) +SYMBOL(is_error_code_enum, std::, ) +SYMBOL(is_error_condition_enum, std::, ) +SYMBOL(is_error_condition_enum_v, std::, ) +SYMBOL(is_execution_policy, std::, ) +SYMBOL(is_execution_policy_v, std::, ) +SYMBOL(is_final, std::, ) +SYMBOL(is_final_v, std::, ) +SYMBOL(is_floating_point, std::, ) +SYMBOL(is_floating_point_v, std::, ) +SYMBOL(is_function, std::, ) +SYMBOL(is_function_v, std::, ) +SYMBOL(is_fundamental, std::, ) +SYMBOL(is_fundamental_v, std::, ) +SYMBOL(is_gt, std::, ) +SYMBOL(is_gteq, std::, ) +SYMBOL(is_heap, std::, ) +SYMBOL(is_heap_until, std::, ) +SYMBOL(is_integral, std::, ) +SYMBOL(is_integral_v, std::, ) +SYMBOL(is_invocable, std::, ) +SYMBOL(is_invocable_r, std::, ) +SYMBOL(is_invocable_r_v, std::, ) +SYMBOL(is_invocable_v, std::, ) +SYMBOL(is_lt, std::, ) +SYMBOL(is_lteq, std::, ) +SYMBOL(is_lvalue_reference, std::, ) +SYMBOL(is_lvalue_reference_v, std::, ) +SYMBOL(is_member_function_pointer, std::, ) +SYMBOL(is_member_function_pointer_v, std::, ) +SYMBOL(is_member_object_pointer, std::, ) +SYMBOL(is_member_object_pointer_v, std::, ) +SYMBOL(is_member_pointer, std::, ) +SYMBOL(is_member_pointer_v, std::, ) +SYMBOL(is_move_assignable, std::, ) +SYMBOL(is_move_assignable_v, std::, ) +SYMBOL(is_move_constructible, std::, ) +SYMBOL(is_move_constructible_v, std::, ) +SYMBOL(is_neq, std::, ) +SYMBOL(is_nothrow_assignable, std::, ) +SYMBOL(is_nothrow_assignable_v, std::, ) +SYMBOL(is_nothrow_constructible, std::, ) +SYMBOL(is_nothrow_constructible_v, std::, ) +SYMBOL(is_nothrow_copy_assignable, std::, ) +SYMBOL(is_nothrow_copy_assignable_v, std::, ) +SYMBOL(is_nothrow_copy_constructible, std::, ) +SYMBOL(is_nothrow_copy_constructible_v, std::, ) +SYMBOL(is_nothrow_default_constructible, std::, ) +SYMBOL(is_nothrow_default_constructible_v, std::, ) +SYMBOL(is_nothrow_destructible, std::, ) +SYMBOL(is_nothrow_destructible_v, std::, ) +SYMBOL(is_nothrow_invocable, std::, ) +SYMBOL(is_nothrow_invocable_r, std::, ) +SYMBOL(is_nothrow_invocable_r_v, std::, ) +SYMBOL(is_nothrow_invocable_v, std::, ) +SYMBOL(is_nothrow_move_assignable, std::, ) +SYMBOL(is_nothrow_move_assignable_v, std::, ) +SYMBOL(is_nothrow_move_constructible, std::, ) +SYMBOL(is_nothrow_move_constructible_v, std::, ) +SYMBOL(is_nothrow_swappable, std::, ) +SYMBOL(is_nothrow_swappable_v, std::, ) +SYMBOL(is_nothrow_swappable_with, std::, ) +SYMBOL(is_nothrow_swappable_with_v, std::, ) +SYMBOL(is_null_pointer, std::, ) +SYMBOL(is_null_pointer_v, std::, ) +SYMBOL(is_object, std::, ) +SYMBOL(is_object_v, std::, ) +SYMBOL(is_partitioned, std::, ) +SYMBOL(is_permutation, std::, ) +SYMBOL(is_placeholder, std::, ) +SYMBOL(is_placeholder_v, std::, ) +SYMBOL(is_pod, std::, ) +SYMBOL(is_pod_v, std::, ) +SYMBOL(is_pointer, std::, ) +SYMBOL(is_pointer_v, std::, ) +SYMBOL(is_polymorphic, std::, ) +SYMBOL(is_polymorphic_v, std::, ) +SYMBOL(is_reference, std::, ) +SYMBOL(is_reference_v, std::, ) +SYMBOL(is_rvalue_reference, std::, ) +SYMBOL(is_rvalue_reference_v, std::, ) +SYMBOL(is_same, std::, ) +SYMBOL(is_same_v, std::, ) +SYMBOL(is_scalar, std::, ) +SYMBOL(is_scalar_v, std::, ) +SYMBOL(is_signed, std::, ) +SYMBOL(is_signed_v, std::, ) +SYMBOL(is_sorted, std::, ) +SYMBOL(is_sorted_until, std::, ) +SYMBOL(is_standard_layout, std::, ) +SYMBOL(is_standard_layout_v, std::, ) +SYMBOL(is_swappable, std::, ) +SYMBOL(is_swappable_v, std::, ) +SYMBOL(is_swappable_with, std::, ) +SYMBOL(is_swappable_with_v, std::, ) +SYMBOL(is_trivial, std::, ) +SYMBOL(is_trivial_v, std::, ) +SYMBOL(is_trivially_assignable, std::, ) +SYMBOL(is_trivially_assignable_v, std::, ) +SYMBOL(is_trivially_constructible, std::, ) +SYMBOL(is_trivially_constructible_v, std::, ) +SYMBOL(is_trivially_copy_assignable, std::, ) +SYMBOL(is_trivially_copy_assignable_v, std::, ) +SYMBOL(is_trivially_copy_constructible, std::, ) +SYMBOL(is_trivially_copy_constructible_v, std::, ) +SYMBOL(is_trivially_copyable, std::, ) +SYMBOL(is_trivially_copyable_v, std::, ) +SYMBOL(is_trivially_default_constructible, std::, ) +SYMBOL(is_trivially_default_constructible_v, std::, ) +SYMBOL(is_trivially_destructible, std::, ) +SYMBOL(is_trivially_destructible_v, std::, ) +SYMBOL(is_trivially_move_assignable, std::, ) +SYMBOL(is_trivially_move_assignable_v, std::, ) +SYMBOL(is_trivially_move_constructible, std::, ) +SYMBOL(is_trivially_move_constructible_v, std::, ) +SYMBOL(is_union, std::, ) +SYMBOL(is_union_v, std::, ) +SYMBOL(is_unsigned, std::, ) +SYMBOL(is_unsigned_v, std::, ) +SYMBOL(is_void, std::, ) +SYMBOL(is_void_v, std::, ) +SYMBOL(is_volatile, std::, ) +SYMBOL(is_volatile_v, std::, ) +SYMBOL(isfinite, std::, ) +SYMBOL(isgreater, std::, ) +SYMBOL(isgreaterequal, std::, ) +SYMBOL(isinf, std::, ) +SYMBOL(isless, std::, ) +SYMBOL(islessequal, std::, ) +SYMBOL(islessgreater, std::, ) +SYMBOL(isnan, std::, ) +SYMBOL(isnormal, std::, ) +SYMBOL(ispow2, std::, ) +SYMBOL(istream_iterator, std::, ) +SYMBOL(istreambuf_iterator, std::, ) +SYMBOL(istringstream, std::, ) +SYMBOL(isunordered, std::, ) +SYMBOL(iswalnum, std::, ) +SYMBOL(iswalpha, std::, ) +SYMBOL(iswblank, std::, ) +SYMBOL(iswcntrl, std::, ) +SYMBOL(iswctype, std::, ) +SYMBOL(iswdigit, std::, ) +SYMBOL(iswgraph, std::, ) +SYMBOL(iswlower, std::, ) +SYMBOL(iswprint, std::, ) +SYMBOL(iswpunct, std::, ) +SYMBOL(iswspace, std::, ) +SYMBOL(iswupper, std::, ) +SYMBOL(iswxdigit, std::, ) +SYMBOL(iter_swap, std::, ) +SYMBOL(iterator, std::, ) +SYMBOL(iterator_traits, std::, ) +SYMBOL(jmp_buf, std::, ) +SYMBOL(kill_dependency, std::, ) +SYMBOL(kilo, std::, ) +SYMBOL(launch, std::, ) +SYMBOL(launder, std::, ) +SYMBOL(lcm, std::, ) +SYMBOL(lconv, std::, ) +SYMBOL(ldexp, std::, ) +SYMBOL(left, std::, ) +SYMBOL(length_error, std::, ) +SYMBOL(less, std::, ) +SYMBOL(less_equal, std::, ) +SYMBOL(lexicographical_compare, std::, ) +SYMBOL(lexicographical_compare_3way, std::, ) +SYMBOL(lgamma, std::, ) +SYMBOL(linear_congruential_engine, std::, ) +SYMBOL(list, std::, ) +SYMBOL(llrint, std::, ) +SYMBOL(llround, std::, ) +SYMBOL(locale, std::, ) +SYMBOL(localeconv, std::, ) +SYMBOL(localtime, std::, ) +SYMBOL(lock, std::, ) +SYMBOL(lock_guard, std::, ) +SYMBOL(log1p, std::, ) +SYMBOL(log2, std::, ) +SYMBOL(log2p1, std::, ) +SYMBOL(logb, std::, ) +SYMBOL(logic_error, std::, ) +SYMBOL(logical_and, std::, ) +SYMBOL(logical_not, std::, ) +SYMBOL(logical_or, std::, ) +SYMBOL(lognormal_distribution, std::, ) +SYMBOL(longjmp, std::, ) +SYMBOL(lower_bound, std::, ) +SYMBOL(lrint, std::, ) +SYMBOL(lround, std::, ) +SYMBOL(make_exception_ptr, std::, ) +SYMBOL(make_from_tuple, std::, ) +SYMBOL(make_heap, std::, ) +SYMBOL(make_move_iterator, std::, ) +SYMBOL(make_optional, std::, ) +SYMBOL(make_pair, std::, ) +SYMBOL(make_reverse_iterator, std::, ) +SYMBOL(make_shared, std::, ) +SYMBOL(make_signed, std::, ) +SYMBOL(make_signed_t, std::, ) +SYMBOL(make_tuple, std::, ) +SYMBOL(make_unique, std::, ) +SYMBOL(make_unsigned, std::, ) +SYMBOL(make_unsigned_t, std::, ) +SYMBOL(malloc, std::, ) +SYMBOL(map, std::, ) +SYMBOL(mask_array, std::, ) +SYMBOL(match_results, std::, ) +SYMBOL(max, std::, ) +SYMBOL(max_align_t, std::, ) +SYMBOL(max_element, std::, ) +SYMBOL(mblen, std::, ) +SYMBOL(mbrlen, std::, ) +SYMBOL(mbrtoc16, std::, ) +SYMBOL(mbrtoc32, std::, ) +SYMBOL(mbrtowc, std::, ) +SYMBOL(mbsinit, std::, ) +SYMBOL(mbsrtowcs, std::, ) +SYMBOL(mbstowcs, std::, ) +SYMBOL(mbtowc, std::, ) +SYMBOL(mega, std::, ) +SYMBOL(mem_fn, std::, ) +SYMBOL(memchr, std::, ) +SYMBOL(memcmp, std::, ) +SYMBOL(memcpy, std::, ) +SYMBOL(memmove, std::, ) +SYMBOL(memory_order, std::, ) +SYMBOL(memory_order_acq_rel, std::, ) +SYMBOL(memory_order_acquire, std::, ) +SYMBOL(memory_order_consume, std::, ) +SYMBOL(memory_order_relaxed, std::, ) +SYMBOL(memory_order_release, std::, ) +SYMBOL(memory_order_seq_cst, std::, ) +SYMBOL(memset, std::, ) +SYMBOL(merge, std::, ) +SYMBOL(mersenne_twister_engine, std::, ) +SYMBOL(messages, std::, ) +SYMBOL(messages_base, std::, ) +SYMBOL(messages_byname, std::, ) +SYMBOL(micro, std::, ) +SYMBOL(milli, std::, ) +SYMBOL(min, std::, ) +SYMBOL(min_element, std::, ) +SYMBOL(minmax, std::, ) +SYMBOL(minmax_element, std::, ) +SYMBOL(minus, std::, ) +SYMBOL(mismatch, std::, ) +SYMBOL(mktime, std::, ) +SYMBOL(modf, std::, ) +SYMBOL(modulus, std::, ) +SYMBOL(money_base, std::, ) +SYMBOL(money_get, std::, ) +SYMBOL(money_put, std::, ) +SYMBOL(moneypunct, std::, ) +SYMBOL(moneypunct_byname, std::, ) +SYMBOL(monostate, std::, ) +SYMBOL(move_backward, std::, ) +SYMBOL(move_if_noexcept, std::, ) +SYMBOL(move_iterator, std::, ) +SYMBOL(multimap, std::, ) +SYMBOL(multiplies, std::, ) +SYMBOL(multiset, std::, ) +SYMBOL(mutex, std::, ) +SYMBOL(nan, std::, ) +SYMBOL(nanf, std::, ) +SYMBOL(nanl, std::, ) +SYMBOL(nano, std::, ) +SYMBOL(nearbyint, std::, ) +SYMBOL(negate, std::, ) +SYMBOL(negation, std::, ) +SYMBOL(negation_v, std::, ) +SYMBOL(negative_binomial_distribution, std::, ) +SYMBOL(nested_exception, std::, ) +SYMBOL(new_handler, std::, ) +SYMBOL(next, std::, ) +SYMBOL(next_permutation, std::, ) +SYMBOL(nextafter, std::, ) +SYMBOL(nexttoward, std::, ) +SYMBOL(no_emit_on_flush, std::, ) +SYMBOL(noboolalpha, std::, ) +SYMBOL(none_of, std::, ) +SYMBOL(norm, std::, ) +SYMBOL(normal_distribution, std::, ) +SYMBOL(noshowbase, std::, ) +SYMBOL(noshowpoint, std::, ) +SYMBOL(noshowpos, std::, ) +SYMBOL(noskipws, std::, ) +SYMBOL(not_equal_to, std::, ) +SYMBOL(not_fn, std::, ) +SYMBOL(nothrow, std::, ) +SYMBOL(nothrow_t, std::, ) +SYMBOL(notify_all_at_thread_exit, std::, ) +SYMBOL(nounitbuf, std::, ) +SYMBOL(nouppercase, std::, ) +SYMBOL(nth_element, std::, ) +SYMBOL(nullopt, std::, ) +SYMBOL(nullopt_t, std::, ) +SYMBOL(nullptr_t, std::, ) +SYMBOL(num_get, std::, ) +SYMBOL(num_put, std::, ) +SYMBOL(numeric_limits, std::, ) +SYMBOL(numpunct, std::, ) +SYMBOL(numpunct_byname, std::, ) +SYMBOL(oct, std::, ) +SYMBOL(ofstream, std::, ) +SYMBOL(once_flag, std::, ) +SYMBOL(optional, std::, ) +SYMBOL(ostream_iterator, std::, ) +SYMBOL(ostreambuf_iterator, std::, ) +SYMBOL(ostringstream, std::, ) +SYMBOL(osyncstream, std::, ) +SYMBOL(out_of_range, std::, ) +SYMBOL(output_iterator_tag, std::, ) +SYMBOL(overflow_error, std::, ) +SYMBOL(owner_less, std::, ) +SYMBOL(packaged_task, std::, ) +SYMBOL(pair, std::, ) +SYMBOL(partial_order, std::, ) +SYMBOL(partial_ordering, std::, ) +SYMBOL(partial_sort, std::, ) +SYMBOL(partial_sort_copy, std::, ) +SYMBOL(partial_sum, std::, ) +SYMBOL(partition, std::, ) +SYMBOL(partition_copy, std::, ) +SYMBOL(partition_point, std::, ) +SYMBOL(perror, std::, ) +SYMBOL(peta, std::, ) +SYMBOL(pico, std::, ) +SYMBOL(piecewise_constant_distribution, std::, ) +SYMBOL(piecewise_construct_t, std::, ) +SYMBOL(piecewise_linear_distribution, std::, ) +SYMBOL(plus, std::, ) +SYMBOL(pointer_safety, std::, ) +SYMBOL(pointer_traits, std::, ) +SYMBOL(poisson_distribution, std::, ) +SYMBOL(polar, std::, ) +SYMBOL(polymorphic_allocator, std::, ) +SYMBOL(pop_heap, std::, ) +SYMBOL(prev, std::, ) +SYMBOL(prev_permutation, std::, ) +SYMBOL(printf, std::, ) +SYMBOL(priority_queue, std::, ) +SYMBOL(proj, std::, ) +SYMBOL(promise, std::, ) +SYMBOL(ptrdiff_t, std::, ) +SYMBOL(push_heap, std::, ) +SYMBOL(put_money, std::, ) +SYMBOL(put_time, std::, ) +SYMBOL(putc, std::, ) +SYMBOL(putchar, std::, ) +SYMBOL(puts, std::, ) +SYMBOL(putwc, std::, ) +SYMBOL(putwchar, std::, ) +SYMBOL(qsort, std::, ) +SYMBOL(queue, std::, ) +SYMBOL(quick_exit, std::, ) +SYMBOL(quoted, std::, ) +SYMBOL(raise, std::, ) +SYMBOL(rand, std::, ) +SYMBOL(random_access_iterator_tag, std::, ) +SYMBOL(random_device, std::, ) +SYMBOL(random_shuffle, std::, ) +SYMBOL(range_error, std::, ) +SYMBOL(rank, std::, ) +SYMBOL(rank_v, std::, ) +SYMBOL(ratio, std::, ) +SYMBOL(ratio_add, std::, ) +SYMBOL(ratio_divide, std::, ) +SYMBOL(ratio_equal, std::, ) +SYMBOL(ratio_equal_v, std::, ) +SYMBOL(ratio_greater, std::, ) +SYMBOL(ratio_greater_equal, std::, ) +SYMBOL(ratio_greater_equal_v, std::, ) +SYMBOL(ratio_greater_v, std::, ) +SYMBOL(ratio_less, std::, ) +SYMBOL(ratio_less_equal, std::, ) +SYMBOL(ratio_less_equal_v, std::, ) +SYMBOL(ratio_less_v, std::, ) +SYMBOL(ratio_multiply, std::, ) +SYMBOL(ratio_not_equal, std::, ) +SYMBOL(ratio_not_equal_v, std::, ) +SYMBOL(ratio_subtract, std::, ) +SYMBOL(rbegin, std::, ) +SYMBOL(real, std::, ) +SYMBOL(realloc, std::, ) +SYMBOL(recursive_mutex, std::, ) +SYMBOL(recursive_timed_mutex, std::, ) +SYMBOL(reduce, std::, ) +SYMBOL(ref, std::, ) +SYMBOL(reference_wrapper, std::, ) +SYMBOL(regex, std::, ) +SYMBOL(regex_error, std::, ) +SYMBOL(regex_iterator, std::, ) +SYMBOL(regex_match, std::, ) +SYMBOL(regex_replace, std::, ) +SYMBOL(regex_search, std::, ) +SYMBOL(regex_token_iterator, std::, ) +SYMBOL(regex_traits, std::, ) +SYMBOL(reinterpret_pointer_cast, std::, ) +SYMBOL(remainder, std::, ) +SYMBOL(remove_all_extents, std::, ) +SYMBOL(remove_all_extents_t, std::, ) +SYMBOL(remove_const, std::, ) +SYMBOL(remove_const_t, std::, ) +SYMBOL(remove_copy, std::, ) +SYMBOL(remove_copy_if, std::, ) +SYMBOL(remove_cv, std::, ) +SYMBOL(remove_cv_t, std::, ) +SYMBOL(remove_cvref, std::, ) +SYMBOL(remove_cvref_t, std::, ) +SYMBOL(remove_extent, std::, ) +SYMBOL(remove_extent_t, std::, ) +SYMBOL(remove_pointer, std::, ) +SYMBOL(remove_pointer_t, std::, ) +SYMBOL(remove_reference, std::, ) +SYMBOL(remove_reference_t, std::, ) +SYMBOL(remove_volatile, std::, ) +SYMBOL(remove_volatile_t, std::, ) +SYMBOL(remquo, std::, ) +SYMBOL(rename, std::, ) +SYMBOL(rend, std::, ) +SYMBOL(replace, std::, ) +SYMBOL(replace_copy, std::, ) +SYMBOL(replace_copy_if, std::, ) +SYMBOL(replace_if, std::, ) +SYMBOL(resetiosflags, std::, ) +SYMBOL(result_of, std::, ) +SYMBOL(result_of_t, std::, ) +SYMBOL(rethrow_exception, std::, ) +SYMBOL(rethrow_if_nested, std::, ) +SYMBOL(reverse, std::, ) +SYMBOL(reverse_copy, std::, ) +SYMBOL(reverse_iterator, std::, ) +SYMBOL(rewind, std::, ) +SYMBOL(right, std::, ) +SYMBOL(rint, std::, ) +SYMBOL(rotate, std::, ) +SYMBOL(rotate_copy, std::, ) +SYMBOL(round, std::, ) +SYMBOL(round_indeterminate, std::, ) +SYMBOL(round_to_nearest, std::, ) +SYMBOL(round_toward_infinity, std::, ) +SYMBOL(round_toward_neg_infinity, std::, ) +SYMBOL(round_toward_zero, std::, ) +SYMBOL(runtime_error, std::, ) +SYMBOL(sample, std::, ) +SYMBOL(scalbln, std::, ) +SYMBOL(scalbn, std::, ) +SYMBOL(scanf, std::, ) +SYMBOL(scientific, std::, ) +SYMBOL(scoped_allocator_adaptor, std::, ) +SYMBOL(search, std::, ) +SYMBOL(search_n, std::, ) +SYMBOL(seed_seq, std::, ) +SYMBOL(set, std::, ) +SYMBOL(set_difference, std::, ) +SYMBOL(set_intersection, std::, ) +SYMBOL(set_new_handler, std::, ) +SYMBOL(set_symmetric_difference, std::, ) +SYMBOL(set_terminate, std::, ) +SYMBOL(set_union, std::, ) +SYMBOL(setbase, std::, ) +SYMBOL(setbuf, std::, ) +SYMBOL(setfill, std::, ) +SYMBOL(setiosflags, std::, ) +SYMBOL(setlocale, std::, ) +SYMBOL(setprecision, std::, ) +SYMBOL(setvbuf, std::, ) +SYMBOL(setw, std::, ) +SYMBOL(shared_future, std::, ) +SYMBOL(shared_lock, std::, ) +SYMBOL(shared_mutex, std::, ) +SYMBOL(shared_ptr, std::, ) +SYMBOL(shared_timed_mutex, std::, ) +SYMBOL(shift_left, std::, ) +SYMBOL(shift_right, std::, ) +SYMBOL(showbase, std::, ) +SYMBOL(showpoint, std::, ) +SYMBOL(showpos, std::, ) +SYMBOL(shuffle, std::, ) +SYMBOL(shuffle_order_engine, std::, ) +SYMBOL(sig_atomic_t, std::, ) +SYMBOL(signal, std::, ) +SYMBOL(signbit, std::, ) +SYMBOL(size, std::, ) +SYMBOL(skipws, std::, ) +SYMBOL(slice, std::, ) +SYMBOL(slice_array, std::, ) +SYMBOL(smatch, std::, ) +SYMBOL(snprintf, std::, ) +SYMBOL(sort, std::, ) +SYMBOL(sort_heap, std::, ) +SYMBOL(span, std::, ) +SYMBOL(sprintf, std::, ) +SYMBOL(srand, std::, ) +SYMBOL(sregex_iterator, std::, ) +SYMBOL(sregex_token_iterator, std::, ) +SYMBOL(sscanf, std::, ) +SYMBOL(ssub_match, std::, ) +SYMBOL(stable_partition, std::, ) +SYMBOL(stable_sort, std::, ) +SYMBOL(stack, std::, ) +SYMBOL(static_pointer_cast, std::, ) +SYMBOL(strcat, std::, ) +SYMBOL(strchr, std::, ) +SYMBOL(strcmp, std::, ) +SYMBOL(strcoll, std::, ) +SYMBOL(strcpy, std::, ) +SYMBOL(strcspn, std::, ) +SYMBOL(streambuf, std::, ) +SYMBOL(streamoff, std::, ) +SYMBOL(streampos, std::, ) +SYMBOL(streamsize, std::, ) +SYMBOL(strerror, std::, ) +SYMBOL(strftime, std::, ) +SYMBOL(string, std::, ) +SYMBOL(string_view, std::, ) +SYMBOL(stringbuf, std::, ) +SYMBOL(stringstream, std::, ) +SYMBOL(strlen, std::, ) +SYMBOL(strncat, std::, ) +SYMBOL(strncmp, std::, ) +SYMBOL(strncpy, std::, ) +SYMBOL(strong_equal, std::, ) +SYMBOL(strong_equality, std::, ) +SYMBOL(strong_order, std::, ) +SYMBOL(strong_ordering, std::, ) +SYMBOL(strpbrk, std::, ) +SYMBOL(strrchr, std::, ) +SYMBOL(strspn, std::, ) +SYMBOL(strstr, std::, ) +SYMBOL(strtod, std::, ) +SYMBOL(strtof, std::, ) +SYMBOL(strtoimax, std::, ) +SYMBOL(strtok, std::, ) +SYMBOL(strtol, std::, ) +SYMBOL(strtold, std::, ) +SYMBOL(strtoll, std::, ) +SYMBOL(strtoul, std::, ) +SYMBOL(strtoull, std::, ) +SYMBOL(strtoumax, std::, ) +SYMBOL(strxfrm, std::, ) +SYMBOL(student_t_distribution, std::, ) +SYMBOL(sub_match, std::, ) +SYMBOL(subtract_with_carry_engine, std::, ) +SYMBOL(swap_ranges, std::, ) +SYMBOL(swprintf, std::, ) +SYMBOL(swscanf, std::, ) +SYMBOL(syncbuf, std::, ) +SYMBOL(system, std::, ) +SYMBOL(system_category, std::, ) +SYMBOL(system_error, std::, ) +SYMBOL(tera, std::, ) +SYMBOL(terminate, std::, ) +SYMBOL(terminate_handler, std::, ) +SYMBOL(tgamma, std::, ) +SYMBOL(thread, std::, ) +SYMBOL(throw_with_nested, std::, ) +SYMBOL(tie, std::, ) +SYMBOL(time, std::, ) +SYMBOL(time_base, std::, ) +SYMBOL(time_get, std::, ) +SYMBOL(time_get_byname, std::, ) +SYMBOL(time_put, std::, ) +SYMBOL(time_put_byname, std::, ) +SYMBOL(time_t, std::, ) +SYMBOL(timed_mutex, std::, ) +SYMBOL(timespec, std::, ) +SYMBOL(timespec_get, std::, ) +SYMBOL(tm, std::, ) +SYMBOL(tmpfile, std::, ) +SYMBOL(tmpnam, std::, ) +SYMBOL(to_address, std::, ) +SYMBOL(to_chars, std::, ) +SYMBOL(to_integer, std::, ) +SYMBOL(to_string, std::, ) +SYMBOL(towctrans, std::, ) +SYMBOL(towlower, std::, ) +SYMBOL(towupper, std::, ) +SYMBOL(transform, std::, ) +SYMBOL(transform_exclusive_scan, std::, ) +SYMBOL(transform_inclusive_scan, std::, ) +SYMBOL(transform_reduce, std::, ) +SYMBOL(true_type, std::, ) +SYMBOL(trunc, std::, ) +SYMBOL(try_lock, std::, ) +SYMBOL(try_to_lock, std::, ) +SYMBOL(try_to_lock_t, std::, ) +SYMBOL(tuple, std::, ) +SYMBOL(tuple_cat, std::, ) +SYMBOL(type_identity, std::, ) +SYMBOL(type_identity_t, std::, ) +SYMBOL(type_index, std::, ) +SYMBOL(type_info, std::, ) +SYMBOL(u16streampos, std::, ) +SYMBOL(u16string, std::, ) +SYMBOL(u16string_view, std::, ) +SYMBOL(u32streampos, std::, ) +SYMBOL(u32string, std::, ) +SYMBOL(u32string_view, std::, ) +SYMBOL(uncaught_exceptions, std::, ) +SYMBOL(undeclare_no_pointers, std::, ) +SYMBOL(undeclare_reachable, std::, ) +SYMBOL(underflow_error, std::, ) +SYMBOL(underlying_type, std::, ) +SYMBOL(underlying_type_t, std::, ) +SYMBOL(ungetc, std::, ) +SYMBOL(ungetwc, std::, ) +SYMBOL(uniform_int_distribution, std::, ) +SYMBOL(uniform_real_distribution, std::, ) +SYMBOL(uninitialized_copy, std::, ) +SYMBOL(uninitialized_copy_n, std::, ) +SYMBOL(uninitialized_default_construct, std::, ) +SYMBOL(uninitialized_default_construct_n, std::, ) +SYMBOL(uninitialized_fill, std::, ) +SYMBOL(uninitialized_fill_n, std::, ) +SYMBOL(uninitialized_move, std::, ) +SYMBOL(uninitialized_move_n, std::, ) +SYMBOL(uninitialized_value_construct, std::, ) +SYMBOL(uninitialized_value_construct_n, std::, ) +SYMBOL(unique, std::, ) +SYMBOL(unique_copy, std::, ) +SYMBOL(unique_lock, std::, ) +SYMBOL(unique_ptr, std::, ) +SYMBOL(unitbuf, std::, ) +SYMBOL(unordered_map, std::, ) +SYMBOL(unordered_multimap, std::, ) +SYMBOL(unordered_multiset, std::, ) +SYMBOL(unordered_set, std::, ) +SYMBOL(upper_bound, std::, ) +SYMBOL(uppercase, std::, ) +SYMBOL(use_facet, std::, ) +SYMBOL(uses_allocator_v, std::, ) +SYMBOL(va_list, std::, ) +SYMBOL(valarray, std::, ) +SYMBOL(variant, std::, ) +SYMBOL(variant_alternative, std::, ) +SYMBOL(variant_alternative_t, std::, ) +SYMBOL(variant_npos, std::, ) +SYMBOL(variant_size, std::, ) +SYMBOL(variant_size_v, std::, ) +SYMBOL(vector, std::, ) +SYMBOL(vfprintf, std::, ) +SYMBOL(vfscanf, std::, ) +SYMBOL(vfwprintf, std::, ) +SYMBOL(vfwscanf, std::, ) +SYMBOL(visit, std::, ) +SYMBOL(void_t, std::, ) +SYMBOL(vprintf, std::, ) +SYMBOL(vscanf, std::, ) +SYMBOL(vsnprintf, std::, ) +SYMBOL(vsprintf, std::, ) +SYMBOL(vsscanf, std::, ) +SYMBOL(vswprintf, std::, ) +SYMBOL(vswscanf, std::, ) +SYMBOL(vwprintf, std::, ) +SYMBOL(vwscanf, std::, ) +SYMBOL(wbuffer_convert, std::, ) +SYMBOL(wcerr, std::, ) +SYMBOL(wcin, std::, ) +SYMBOL(wclog, std::, ) +SYMBOL(wcmatch, std::, ) +SYMBOL(wcout, std::, ) +SYMBOL(wcregex_iterator, std::, ) +SYMBOL(wcregex_token_iterator, std::, ) +SYMBOL(wcrtomb, std::, ) +SYMBOL(wcscat, std::, ) +SYMBOL(wcschr, std::, ) +SYMBOL(wcscmp, std::, ) +SYMBOL(wcscoll, std::, ) +SYMBOL(wcscpy, std::, ) +SYMBOL(wcscspn, std::, ) +SYMBOL(wcsftime, std::, ) +SYMBOL(wcslen, std::, ) +SYMBOL(wcsncat, std::, ) +SYMBOL(wcsncmp, std::, ) +SYMBOL(wcsncpy, std::, ) +SYMBOL(wcspbrk, std::, ) +SYMBOL(wcsrchr, std::, ) +SYMBOL(wcsrtombs, std::, ) +SYMBOL(wcsspn, std::, ) +SYMBOL(wcsstr, std::, ) +SYMBOL(wcstod, std::, ) +SYMBOL(wcstof, std::, ) +SYMBOL(wcstoimax, std::, ) +SYMBOL(wcstok, std::, ) +SYMBOL(wcstol, std::, ) +SYMBOL(wcstold, std::, ) +SYMBOL(wcstoll, std::, ) +SYMBOL(wcstombs, std::, ) +SYMBOL(wcstoul, std::, ) +SYMBOL(wcstoull, std::, ) +SYMBOL(wcstoumax, std::, ) +SYMBOL(wcsub_match, std::, ) +SYMBOL(wcsxfrm, std::, ) +SYMBOL(wctob, std::, ) +SYMBOL(wctomb, std::, ) +SYMBOL(wctrans, std::, ) +SYMBOL(wctype, std::, ) +SYMBOL(weak_equal, std::, ) +SYMBOL(weak_equality, std::, ) +SYMBOL(weak_order, std::, ) +SYMBOL(weak_ordering, std::, ) +SYMBOL(weak_ptr, std::, ) +SYMBOL(weibull_distribution, std::, ) +SYMBOL(wfstream, std::, ) +SYMBOL(wifstream, std::, ) +SYMBOL(wios, std::, ) +SYMBOL(wiostream, std::, ) +SYMBOL(wistringstream, std::, ) +SYMBOL(wmemchr, std::, ) +SYMBOL(wmemcmp, std::, ) +SYMBOL(wmemcpy, std::, ) +SYMBOL(wmemmove, std::, ) +SYMBOL(wmemset, std::, ) +SYMBOL(wofstream, std::, ) +SYMBOL(wostringstream, std::, ) +SYMBOL(wosyncstream, std::, ) +SYMBOL(wprintf, std::, ) +SYMBOL(wregex, std::, ) +SYMBOL(ws, std::, ) +SYMBOL(wscanf, std::, ) +SYMBOL(wsmatch, std::, ) +SYMBOL(wsregex_iterator, std::, ) +SYMBOL(wsregex_token_iterator, std::, ) +SYMBOL(wssub_match, std::, ) +SYMBOL(wstreambuf, std::, ) +SYMBOL(wstreampos, std::, ) +SYMBOL(wstring, std::, ) +SYMBOL(wstring_convert, std::, ) +SYMBOL(wstring_view, std::, ) +SYMBOL(wstringbuf, std::, ) +SYMBOL(wstringstream, std::, ) +SYMBOL(wsyncbuf, std::, ) +SYMBOL(yocto, std::, ) +SYMBOL(yotta, std::, ) +SYMBOL(zepto, std::, ) +SYMBOL(zetta, std::, ) Index: clangd/include-mapping/gen_std.py =================================================================== --- clangd/include-mapping/gen_std.py +++ clangd/include-mapping/gen_std.py @@ -0,0 +1,149 @@ +#!/usr/bin/env python +#===- gen_std.py - ------------------------------------------*- python -*--===# +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===------------------------------------------------------------------------===# + +"""gen_std.py is a tool to generate a lookup table (from qualified names to +include headers) for C++ Standard Library symbols by parsing archieved HTML +files from cppreference. + +Caveats and FIXMEs: + - only symbols directly in "std" namespace are added, we should also add std's + subnamespace symbols (e.g. chrono). + - symbols with multiple variants or defined in multiple headers aren't added, + e.g. std::move, std::swap + +Usage: + 1. Install BeautifulSoup dependency, see instruction: + https://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-beautiful-soup + 2. Download cppreference offline HTML files (e.g. html_book_20181028.zip) at + https://en.cppreference.com/w/Cppreference:Archives + 3. Unzip the zip file from step 2 to directory , you should + get a "reference" directory in + 4. Run the command: + gen_std.py -cppreference > StdSymbolMap.inc +""" + +from bs4 import BeautifulSoup + +import argparse +import datetime +import os +import sys + +STDGEN_CODE_PREFIX = """\ +//===-- gen_std.py generated file -------------------------------*- C++ -*-===// +// +// Used to build a lookup table (qualified names => include headers) for C++ +// Standard Library symbols. +// +// Automatically generated file, DO NOT EDIT! +// +// Generated from cppreference offline HTML book (modified on %s). +//===----------------------------------------------------------------------===// +""" + +def ParseSymbolPage(symbol_page_html): + """Parse symbol page and retrieve the include header defined in this page. + The symbol page provides header for the symbol, specifically in + "Defined in header
" section. An example: + + +
Defined in header <ratio>
+ + + Returns a list of headers. + """ + headers = [] + + soup = BeautifulSoup(symbol_page_html, "html.parser") + # "Defined in header " are defined in or + # . + for header_tr in soup.select('tr.t-dcl-header,tr.t-dsc-header'): + if "Defined in header " in header_tr.text: + # The interesting header content (e.g. ) is wrapped in . + for header_code in header_tr.find_all("code"): + headers.append(header_code.text) + return headers + + +def ParseIndexPage(index_page_html): + """Parse index page. + The index page lists all std symbols and hrefs to their detailed pages + (which contain the defined header). An example: + + abs() (int)
+ acos()
+ + Returns a list of tuple (symbol_name, relative_path_to_symbol_page). + """ + symbols = [] + soup = BeautifulSoup(index_page_html, "html.parser") + for symbol_href in soup.select("a[title]"): + symbol_tt = symbol_href.find("tt") + if symbol_tt: + symbols.append((symbol_tt.text.rstrip("<>()"), # strip any trailing <>() + symbol_href["href"])) + return symbols + + +def ParseArg(): + parser = argparse.ArgumentParser(description='Generate StdGen file') + parser.add_argument('-cppreference', metavar='PATH', + default='', + help='path to the cppreference offline HTML directory', + required=True + ) + return parser.parse_args() + + +def main(): + args = ParseArg() + cpp_reference_root = args.cppreference + cpp_symbol_root = os.path.join(cpp_reference_root, "en", "cpp") + index_page_path = os.path.join(cpp_symbol_root, "symbol_index.html") + if not os.path.exists(index_page_path): + exit("Path %s doesn't exist!" % index_page_path) + + # We don't have version information from the unzipped offline HTML files. + # so we use the modified time of the symbol_index.html as the version. + cppreference_modified_date = datetime.datetime.fromtimestamp( + os.stat(index_page_path).st_mtime).strftime('%Y-%m-%d') + + # Workflow steps: + # 1. Parse index page which lists all symbols to get symbol + # name (unqualified name) and its href link to the symbol page which + # contains the defined header. + # 2. Parse the symbol page to get the defined header. + + # A map from symbol name to a set of headers. + symbols = {} + with open(index_page_path, "r") as f: + for symbol_name, symbol_page_path in ParseIndexPage(f.read()): + with open(os.path.join(cpp_symbol_root, symbol_page_path), "r") as f: + headers = ParseSymbolPage(f.read()) + if not headers: + sys.stderr.write("No header found for symbol %s at %s\n" % (symbol_name, + symbol_page_path)) + continue + + if symbol_name not in symbols: + symbols[symbol_name] = set() + symbols[symbol_name].update(headers) + + # Emit results to stdout. + print STDGEN_CODE_PREFIX % cppreference_modified_date + for name, headers in sorted(symbols.items(), key=lambda t : t[0]): + if len(headers) > 1: + # FIXME: support symbols with multiple headers (e.g. std::move). + continue + # SYMBOL(unqualified_name, namespace, header) + print "SYMBOL(%s, %s, %s)" % (name, "std::", list(headers)[0]) + + +if __name__ == '__main__': + main() Index: clangd/include-mapping/test.py =================================================================== --- clangd/include-mapping/test.py +++ clangd/include-mapping/test.py @@ -0,0 +1,101 @@ +#!/usr/bin/env python +#===- test.py - ---------------------------------------------*- python -*--===# +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +#===------------------------------------------------------------------------===# + +from gen_std import ParseSymbolPage, ParseIndexPage + +import unittest + +class TestStdGen(unittest.TestCase): + + def testParseIndexPage(self): + html = """ + abs() (int)
+ abs<>() (std::complex)
+ acos()
+ acosh() (since C++11)
+ as_bytes<>() (since C++20)
+ """ + + actual = ParseIndexPage(html) + expected = [ + ("abs", "abs.html"), + ("abs", "complex/abs.html"), + ("acos", "acos.html"), + ("acosh", "acosh.html"), + ("as_bytes", "as_bytes.html"), + ] + self.assertEqual(len(actual), len(expected)) + for i in range(0, len(actual)): + self.assertEqual(expected[i][0], actual[i][0]) + self.assertTrue(actual[i][1].endswith(expected[i][1])) + + + def testParseSymbolPage_SingleHeader(self): + # Defined in header + html = """ + + + + + + +
Defined in header <cmath> +
+""" + self.assertEqual(ParseSymbolPage(html), ['']) + + + def testParseSymbolPage_MulHeaders(self): + # Defined in header + # Defined in header + # Defined in header + html = """ + + + + + + + + + + + + + + + + +
Defined in header <cstddef> +
Defined in header <cstdio> +
Defined in header <cstdlib> +
+""" + self.assertEqual(ParseSymbolPage(html), + ['', '', '']) + + + def testParseSymbolPage_MulHeadersInSameDiv(self): + # Multile blocks in a Div. + # Defined in header + # Defined in header + html = """ + +
+ Defined in header <algorithm>
+ Defined in header <utility> +
+ + +""" + self.assertEqual(ParseSymbolPage(html), ['', '']) + + +if __name__ == '__main__': + unittest.main() Index: clangd/index/CanonicalIncludes.cpp =================================================================== --- clangd/index/CanonicalIncludes.cpp +++ clangd/index/CanonicalIncludes.cpp @@ -107,57 +107,30 @@ void addSystemHeadersMapping(CanonicalIncludes *Includes) { static const std::vector> SymbolMap = { - {"std::addressof", ""}, // Map symbols in to their preferred includes. {"std::basic_filebuf", ""}, - {"std::basic_fstream", ""}, - {"std::basic_ifstream", ""}, - {"std::basic_ofstream", ""}, {"std::filebuf", ""}, - {"std::fstream", ""}, - {"std::ifstream", ""}, - {"std::ofstream", ""}, {"std::wfilebuf", ""}, - {"std::wfstream", ""}, - {"std::wifstream", ""}, - {"std::wofstream", ""}, - {"std::basic_ios", ""}, - {"std::ios", ""}, - {"std::wios", ""}, - {"std::basic_iostream", ""}, - {"std::iostream", ""}, - {"std::wiostream", ""}, {"std::basic_istream", ""}, {"std::istream", ""}, {"std::wistream", ""}, - {"std::istreambuf_iterator", ""}, - {"std::ostreambuf_iterator", ""}, {"std::basic_ostream", ""}, {"std::ostream", ""}, {"std::wostream", ""}, - {"std::basic_istringstream", ""}, - {"std::basic_ostringstream", ""}, - {"std::basic_stringbuf", ""}, - {"std::basic_stringstream", ""}, - {"std::istringstream", ""}, - {"std::ostringstream", ""}, - {"std::string", ""}, - {"std::stringbuf", ""}, - {"std::stringstream", ""}, - {"std::wistringstream", ""}, - {"std::wostringstream", ""}, - {"std::wstringbuf", ""}, - {"std::wstringstream", ""}, - {"std::basic_streambuf", ""}, - {"std::streambuf", ""}, - {"std::wstreambuf", ""}, {"std::uint_least16_t", ""}, // redeclares these {"std::uint_least32_t", ""}, - {"std::declval", ""}, +#define SYMBOL(Name, NameSpace, Header) { #NameSpace#Name, #Header }, + #include "StdSymbolMap.inc" +#undef SYMBOL }; for (const auto &Pair : SymbolMap) Includes->addSymbolMapping(Pair.first, Pair.second); + // FIXME: remove the std header mapping once we support ambiguous symbols, now + // it serves as a fallback to disambiguate: + // - symbols with mulitiple headers (e.g. std::move) + // - symbols with a primary template in one header and a specialization in + // another (std::abs) static const std::vector> SystemHeaderMap = { {"include/__stddef_max_align_t.h", ""},