[UCRT] Add using declatarions for template base-classes (GCC compatibility)

This commit is contained in:
Timo Kreuzer 2024-10-14 00:30:51 +03:00
parent 5ba105e9b5
commit c15b618a17
2 changed files with 71 additions and 0 deletions

View file

@ -42,6 +42,7 @@
: __crt_simd_pack_traits<Isa> : __crt_simd_pack_traits<Isa>
{ {
using element_type = Element; using element_type = Element;
using __crt_simd_pack_traits<Isa>::pack_size;
enum : size_t enum : size_t
{ {

View file

@ -111,6 +111,10 @@ template <typename Character>
class console_output_adapter class console_output_adapter
: public output_adapter_common<Character, console_output_adapter<Character>> : public output_adapter_common<Character, console_output_adapter<Character>>
{ {
#ifndef _MSC_VER // For retarded compilers!
using oac_base = output_adapter_common<Character, console_output_adapter<Character>>;
using oac_base::write_string_impl;
#endif
public: public:
typedef __acrt_stdio_char_traits<Character> char_traits; typedef __acrt_stdio_char_traits<Character> char_traits;
@ -141,6 +145,10 @@ template <typename Character>
class stream_output_adapter class stream_output_adapter
: public output_adapter_common<Character, stream_output_adapter<Character>> : public output_adapter_common<Character, stream_output_adapter<Character>>
{ {
#ifndef _MSC_VER // For retarded compilers!
using oac_base = output_adapter_common<Character, stream_output_adapter<Character>>;
using oac_base::write_string_impl;
#endif
public: public:
typedef __acrt_stdio_char_traits<Character> char_traits; typedef __acrt_stdio_char_traits<Character> char_traits;
@ -969,6 +977,11 @@ class output_adapter_data
: protected common_data<Character> : protected common_data<Character>
{ {
protected: protected:
#ifndef _MSC_VER // For retarded compilers!
using common_data<Character>::_options;
using common_data<Character>::_format_it;
using common_data<Character>::_valist_it;
#endif
output_adapter_data( output_adapter_data(
OutputAdapter const& output_adapter, OutputAdapter const& output_adapter,
uint64_t const options, uint64_t const options,
@ -1003,6 +1016,12 @@ class standard_base
: protected output_adapter_data<Character, OutputAdapter> : protected output_adapter_data<Character, OutputAdapter>
{ {
protected: protected:
#ifndef _MSC_VER // For retarded compilers!
using common_data_base = typename output_adapter_data<Character, OutputAdapter>::template common_data<Character>;
using common_data_base::_valist_it;
using common_data_base::_field_width;
using common_data_base::_precision;
#endif
template <typename... Ts> template <typename... Ts>
standard_base(Ts&&... arguments) throw() standard_base(Ts&&... arguments) throw()
: output_adapter_data<Character, OutputAdapter>{arguments... }, : output_adapter_data<Character, OutputAdapter>{arguments... },
@ -1106,6 +1125,11 @@ class format_validation_base
: protected standard_base<Character, OutputAdapter> : protected standard_base<Character, OutputAdapter>
{ {
protected: protected:
#ifndef _MSC_VER // For retarded compilers!
using common_data_base = typename standard_base<Character, OutputAdapter>::template output_adapter_data<Character, OutputAdapter>::template common_data<Character>;
using common_data_base::_ptd;
using common_data_base::_state;
#endif
template <typename... Ts> template <typename... Ts>
format_validation_base(Ts&&... arguments) throw() format_validation_base(Ts&&... arguments) throw()
: standard_base<Character, OutputAdapter>{arguments...} : standard_base<Character, OutputAdapter>{arguments...}
@ -1150,6 +1174,19 @@ class positional_parameter_base
: protected format_validation_base<Character, OutputAdapter> : protected format_validation_base<Character, OutputAdapter>
{ {
protected: protected:
#if defined(__GNUC__) || defined(__clang__) // For retarded compilers!
using common_data_base = typename format_validation_base<Character, OutputAdapter>::template standard_base<Character, OutputAdapter>::template output_adapter_data<Character, OutputAdapter>::template common_data<Character>;
using output_adapter_data = typename format_validation_base<Character, OutputAdapter>::template standard_base<Character, OutputAdapter>::template output_adapter_data<Character, OutputAdapter>;
using common_data_base::_format_it;
using common_data_base::_ptd;
using common_data_base::_field_width;
using common_data_base::_precision;
using common_data_base::_format_char;
using common_data_base::_valist_it;
using common_data_base::_length;
using common_data_base::_state;
using common_data_base::_options;
#endif
typedef positional_parameter_base self_type; typedef positional_parameter_base self_type;
typedef format_validation_base base_type; typedef format_validation_base base_type;
@ -1641,6 +1678,39 @@ class output_processor
: private ProcessorBase : private ProcessorBase
{ {
public: public:
#ifndef _MSC_VER // For retarded compilers!
using ProcessorBase::advance_to_next_pass;
using ProcessorBase::validate_and_update_state_at_beginning_of_format_character;
using ProcessorBase::validate_and_update_state_at_end_of_format_string;
using ProcessorBase::should_skip_normal_state_processing;
using ProcessorBase::update_field_width;
using ProcessorBase::should_format;
using ProcessorBase::update_precision;
using ProcessorBase::should_skip_type_state_output;
using ProcessorBase::validate_state_for_type_case_a;
using ProcessorBase::tchar_string;
using ProcessorBase::state_transition_table;
using ProcessorBase::state_count;
using oad_base = typename ProcessorBase::output_adapter_data;
using oad_base::_output_adapter;
using common_data_base = typename ProcessorBase::common_data_base;
using common_data_base::_string_length;
using common_data_base::_ptd;
using common_data_base::_format_it;
using common_data_base::_state;
using common_data_base::_format_char;
using common_data_base::_characters_written;
using common_data_base::_string_is_wide;
using common_data_base::_field_width;
using common_data_base::_suppress_output;
using common_data_base::_flags;
using common_data_base::_precision;
using common_data_base::_length;
using common_data_base::_options;
using common_data_base::_buffer;
using common_data_base::_narrow_string;
using common_data_base::_wide_string;
#endif
typedef __acrt_stdio_char_traits<Character> char_traits; typedef __acrt_stdio_char_traits<Character> char_traits;