diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-03-04 13:53:13 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-03-24 11:48:17 +0000 |
commit | b865c497497a6d1beeeb7e7c66375d4cf286133b (patch) | |
tree | b5a857328f53a9f8e1bfb2c44def0d9bd230bdd1 | |
parent | 5b69bca2acb9a7ecd69b26ad827b2e9ee4c90fdc (diff) | |
download | qtwebengine-chromium-b865c497497a6d1beeeb7e7c66375d4cf286133b.tar.gz |
FIXUP: Fixes for building with MSVC
Change-Id: I92adc5c19b07b531fd5d6e2f26537dc51fd70922
Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
30 files changed, 86 insertions, 22 deletions
diff --git a/chromium/base/allocator/partition_allocator/starscan/state_bitmap.h b/chromium/base/allocator/partition_allocator/starscan/state_bitmap.h index 96c1e5ce65a..27c43604814 100644 --- a/chromium/base/allocator/partition_allocator/starscan/state_bitmap.h +++ b/chromium/base/allocator/partition_allocator/starscan/state_bitmap.h @@ -69,8 +69,8 @@ class StateBitmap final { using CellType = uintptr_t; static constexpr size_t kBitsPerCell = sizeof(CellType) * CHAR_BIT; - static constexpr size_t kBitsNeededForAllocation = - bits::Log2Floor(static_cast<size_t>(State::kNumOfStates)); + static constexpr size_t kBitsNeededForAllocation = 2; +// bits::Log2Floor(static_cast<size_t>(State::kNumOfStates)); static constexpr CellType kStateMask = (1 << kBitsNeededForAllocation) - 1; static constexpr size_t kBitmapSize = diff --git a/chromium/base/allocator/partition_allocator/yield_processor.h b/chromium/base/allocator/partition_allocator/yield_processor.h index 9a2adcbe845..7a7d2fa7f02 100644 --- a/chromium/base/allocator/partition_allocator/yield_processor.h +++ b/chromium/base/allocator/partition_allocator/yield_processor.h @@ -19,8 +19,12 @@ #else #if defined(COMPILER_MSVC) -#include <windows.h> -#define YIELD_PROCESSOR YieldProcessor() +#include <intrin.h> +#if defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_X86) +#define YIELD_PROCESSOR _mm_pause() +#else +#define YIELD_PROCESSOR __yield() +#endif #elif defined(ARCH_CPU_X86_64) || defined(ARCH_CPU_X86) #define YIELD_PROCESSOR __asm__ __volatile__("pause") #elif (defined(ARCH_CPU_ARMEL) && __ARM_ARCH >= 6) || defined(ARCH_CPU_ARM64) diff --git a/chromium/base/feature_list.h b/chromium/base/feature_list.h index 4c978ef9202..7463d597114 100644 --- a/chromium/base/feature_list.h +++ b/chromium/base/feature_list.h @@ -43,6 +43,7 @@ enum FeatureState { // pointer-based identity lookup. // Note: New code should use CONSTINIT on the base::Feature declaration. struct BASE_EXPORT Feature { + constexpr Feature() : name(nullptr), default_state(FEATURE_DISABLED_BY_DEFAULT) {} constexpr Feature(const char* name, FeatureState default_state) : name(name), default_state(default_state) { #if BUILDFLAG(ENABLE_BANNED_BASE_FEATURE_PREFIX) diff --git a/chromium/base/memory/raw_ptr.h b/chromium/base/memory/raw_ptr.h index 251d06f810d..be47b530dee 100644 --- a/chromium/base/memory/raw_ptr.h +++ b/chromium/base/memory/raw_ptr.h @@ -611,6 +611,15 @@ class TRIVIAL_ABI raw_ptr { return *this += -delta_elems; } + template<typename U, typename = std::enable_if_t<std::is_integral<U>::value>> + RAW_PTR_FUNC_ATTRIBUTES T* operator+(U delta_elems) const { + return get() + delta_elems; + } + template<typename U, typename = std::enable_if_t<std::is_integral<U>::value>> + RAW_PTR_FUNC_ATTRIBUTES T* operator-(U delta_elems) const { + return get() - delta_elems; + } + // Comparison operators between raw_ptr and raw_ptr<U>/U*/std::nullptr_t. // Strictly speaking, it is not necessary to provide these: the compiler can // use the conversion operator implicitly to allow comparisons to fall back to diff --git a/chromium/base/metrics/histogram_macros.h b/chromium/base/metrics/histogram_macros.h index ec1d99b9b6d..e253d7b7ef8 100644 --- a/chromium/base/metrics/histogram_macros.h +++ b/chromium/base/metrics/histogram_macros.h @@ -340,6 +340,9 @@ enum class ScopedHistogramTiming { // All of these macros must be called with |name| as a runtime constant. // For details on usage, see the documentation on the non-stability equivalents. +#ifndef CR_EXPAND_ARG +#define CR_EXPAND_ARG(x) x +#endif #define UMA_STABILITY_HISTOGRAM_BOOLEAN(name, sample) \ STATIC_HISTOGRAM_POINTER_BLOCK( \ diff --git a/chromium/base/metrics/histogram_macros_internal.h b/chromium/base/metrics/histogram_macros_internal.h index 977452e3a77..10ac022c9d1 100644 --- a/chromium/base/metrics/histogram_macros_internal.h +++ b/chromium/base/metrics/histogram_macros_internal.h @@ -28,9 +28,9 @@ namespace internal { template <typename Enum, typename SFINAE = void> struct EnumSizeTraits { static constexpr Enum Count() { - static_assert( - sizeof(Enum) == 0, - "enumerator must define kMaxValue enumerator to use this macro!"); +// static_assert( +// sizeof(Enum) == 0, +// "enumerator must define kMaxValue enumerator to use this macro!"); return Enum(); } }; diff --git a/chromium/base/metrics/histogram_macros_local.h b/chromium/base/metrics/histogram_macros_local.h index e41b5ef3e8c..74ebd0a73f5 100644 --- a/chromium/base/metrics/histogram_macros_local.h +++ b/chromium/base/metrics/histogram_macros_local.h @@ -9,6 +9,10 @@ #include "base/metrics/histogram_macros_internal.h" #include "base/time/time.h" +#ifndef CR_EXPAND_ARG +#define CR_EXPAND_ARG(x) x +#endif + // TODO(rkaplow): Migrate all LOCAL_* usage within Chromium to include this // file instead of the histogram_macros.h file. diff --git a/chromium/base/trace_event/optional_trace_event.h b/chromium/base/trace_event/optional_trace_event.h index ac7636acd9e..90a6e0766f2 100644 --- a/chromium/base/trace_event/optional_trace_event.h +++ b/chromium/base/trace_event/optional_trace_event.h @@ -15,6 +15,10 @@ #if BUILDFLAG(OPTIONAL_TRACE_EVENTS_ENABLED) +#ifndef CR_EXPAND_ARG +#define CR_EXPAND_ARG(x) x +#endif + #define OPTIONAL_TRACE_EVENT0(...) CR_EXPAND_ARG(TRACE_EVENT0(__VA_ARGS__)) #define OPTIONAL_TRACE_EVENT1(...) CR_EXPAND_ARG(TRACE_EVENT1(__VA_ARGS__)) #define OPTIONAL_TRACE_EVENT2(...) CR_EXPAND_ARG(TRACE_EVENT2(__VA_ARGS__)) diff --git a/chromium/base/win/nt_status.cc b/chromium/base/win/nt_status.cc index 690a9566a7c..349df7d484a 100644 --- a/chromium/base/win/nt_status.cc +++ b/chromium/base/win/nt_status.cc @@ -9,7 +9,7 @@ #include <windows.h> #include <winternl.h> -using GetLastNtStatusFn = NTSTATUS NTAPI (*)(); +using GetLastNtStatusFn = NTSTATUS /*NTAPI*/ (*)(); constexpr const wchar_t kNtDllName[] = L"ntdll.dll"; constexpr const char kLastStatusFnName[] = "RtlGetLastNtStatus"; diff --git a/chromium/build/config/compiler/BUILD.gn b/chromium/build/config/compiler/BUILD.gn index 2c9b660e0ae..19f8038d24a 100644 --- a/chromium/build/config/compiler/BUILD.gn +++ b/chromium/build/config/compiler/BUILD.gn @@ -1611,6 +1611,12 @@ config("default_warnings") { "/wd4068", # unknown pragma "/wd5051", # attribute requires newer c++ ] + + cflags_cc += [ + # Allow "noexcept" annotations even though we compile with exceptions + # disabled. + "/wd4577", + ] if (!is_clang) { # TODO(thakis): Remove this once # https://swiftshader-review.googlesource.com/c/SwiftShader/+/57968 has diff --git a/chromium/components/metrics/BUILD.gn b/chromium/components/metrics/BUILD.gn index e8dd1f354b7..9e03f9ed16d 100644 --- a/chromium/components/metrics/BUILD.gn +++ b/chromium/components/metrics/BUILD.gn @@ -3,6 +3,7 @@ # found in the LICENSE file. import("//build/config/chromeos/ui_mode.gni") +import("//build/config/features.gni") import("//build/config/jumbo.gni") import("//testing/test.gni") @@ -204,6 +205,10 @@ jumbo_static_library("metrics") { if (is_fuchsia) { sources += [ "drive_metrics_provider_fuchsia.cc" ] } + + if (use_qt) { + deps -= [ "//components/variations/field_trial_config" ] + } } if (is_android) { diff --git a/chromium/components/metrics/metrics_state_manager.cc b/chromium/components/metrics/metrics_state_manager.cc index 22b79eb7698..9bd4260766c 100644 --- a/chromium/components/metrics/metrics_state_manager.cc +++ b/chromium/components/metrics/metrics_state_manager.cc @@ -41,7 +41,9 @@ #include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/variations/entropy_provider.h" +#ifndef TOOLKIT_QT #include "components/variations/field_trial_config/field_trial_util.h" +#endif #include "components/variations/pref_names.h" #include "components/variations/variations_switches.h" #include "third_party/metrics_proto/chrome_user_metrics_extension.pb.h" @@ -336,6 +338,7 @@ int MetricsStateManager::GetLowEntropySource() { void MetricsStateManager::InstantiateFieldTrialList( const char* enable_gpu_benchmarking_switch, EntropyProviderType entropy_provider_type) { +#ifndef TOOLKIT_QT // Instantiate the FieldTrialList to support field trials. If an instance // already exists, this is likely a test scenario with a ScopedFeatureList, so // use the existing instance so that any overrides are still applied. @@ -395,7 +398,7 @@ void MetricsStateManager::InstantiateFieldTrialList( ::switches::kForceFieldTrials)); } } - +#endif // Initializing the CleanExitBeacon is done after FieldTrialList instantiation // to allow experimentation on the CleanExitBeacon. clean_exit_beacon_.Initialize(); diff --git a/chromium/content/browser/attribution_reporting/attribution_manager_impl.cc b/chromium/content/browser/attribution_reporting/attribution_manager_impl.cc index 874924f1502..0df1f805e78 100644 --- a/chromium/content/browser/attribution_reporting/attribution_manager_impl.cc +++ b/chromium/content/browser/attribution_reporting/attribution_manager_impl.cc @@ -104,7 +104,7 @@ ConversionReportSendOutcome ConvertToConversionReportSendOutcome( } // namespace -const constexpr base::TimeDelta kAttributionManagerQueueReportsInterval = +const base::TimeDelta kAttributionManagerQueueReportsInterval = base::Minutes(30); AttributionManager* AttributionManagerProviderImpl::GetManager( diff --git a/chromium/content/browser/shared_storage/shared_storage_document_service_impl.h b/chromium/content/browser/shared_storage/shared_storage_document_service_impl.h index fb00dd058e7..70d16e655e2 100644 --- a/chromium/content/browser/shared_storage/shared_storage_document_service_impl.h +++ b/chromium/content/browser/shared_storage/shared_storage_document_service_impl.h @@ -36,7 +36,7 @@ class SharedStorageDocumentServiceImpl final const std::vector<uint8_t>& serialized_data) override; private: - friend class DocumentUserData; + friend class DocumentUserData<SharedStorageDocumentServiceImpl>; explicit SharedStorageDocumentServiceImpl(RenderFrameHost*); diff --git a/chromium/content/browser/site_instance_group.h b/chromium/content/browser/site_instance_group.h index 1ce5c8e6f6e..669268f48bb 100644 --- a/chromium/content/browser/site_instance_group.h +++ b/chromium/content/browser/site_instance_group.h @@ -49,7 +49,7 @@ class SiteInstanceGroup : public base::RefCounted<SiteInstanceGroup> { SiteInstanceGroupId GetId(); private: - friend class RefCounted<SiteInstanceGroup>; + friend class base::RefCounted<SiteInstanceGroup>; ~SiteInstanceGroup(); // A unique ID for this SiteInstanceGroup. diff --git a/chromium/extensions/common/features/feature_flags.cc b/chromium/extensions/common/features/feature_flags.cc index 58793014412..b00cff465b3 100644 --- a/chromium/extensions/common/features/feature_flags.cc +++ b/chromium/extensions/common/features/feature_flags.cc @@ -17,7 +17,7 @@ namespace { // Feature flags for extension features. These can be used to implement remote // kill switches for extension features. Note any such feature flags must // generally be removed once the API has been stable for a few releases. -constexpr std::array<base::Feature, 0> kFeatureFlags{}; +constexpr std::array<base::Feature, 0> kFeatureFlags = {}; const std::vector<base::Feature>* g_feature_flags_test_override = nullptr; diff --git a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc index 68f1e49bb6b..12bdd767f9f 100644 --- a/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc +++ b/chromium/gpu/command_buffer/service/webgpu_decoder_impl.cc @@ -717,7 +717,7 @@ void WebGPUDecoderImpl::OnRequestDeviceCallback( cmds::DawnReturnRequestDeviceInfo* return_request_device_info = reinterpret_cast<cmds::DawnReturnRequestDeviceInfo*>( serialized_buffer.data()); - *return_request_device_info = {}; + *return_request_device_info = cmds::DawnReturnRequestDeviceInfo(); return_request_device_info->request_device_serial = request_device_serial; return_request_device_info->is_request_device_success = status == WGPURequestDeviceStatus_Success; diff --git a/chromium/net/quic/platform/impl/quic_flags_impl.cc b/chromium/net/quic/platform/impl/quic_flags_impl.cc index 12b4f247ecc..3a36a25ba5c 100644 --- a/chromium/net/quic/platform/impl/quic_flags_impl.cc +++ b/chromium/net/quic/platform/impl/quic_flags_impl.cc @@ -35,6 +35,10 @@ external_value, doc) \ type FLAGS_##flag = external_value; +#ifndef CR_EXPAND_ARG +#define CR_EXPAND_ARG(x) x +#endif + // Preprocessor macros can only have one definition. // Select the right macro based on the number of arguments. #define GET_6TH_ARG(arg1, arg2, arg3, arg4, arg5, arg6, ...) arg6 diff --git a/chromium/services/network/public/cpp/features.cc b/chromium/services/network/public/cpp/features.cc index 4aaf592cb9d..9c9fe0eadd3 100644 --- a/chromium/services/network/public/cpp/features.cc +++ b/chromium/services/network/public/cpp/features.cc @@ -239,12 +239,12 @@ const base::Feature kCheckCacheForQueuedRequests{ "CheckCacheForQueuedRequests", base::FEATURE_DISABLED_BY_DEFAULT}; // The time interval before checking the cache for queued request. -constexpr base::FeatureParam<base::TimeDelta> kQueuedRequestsCacheCheckInterval{ +const base::FeatureParam<base::TimeDelta> kQueuedRequestsCacheCheckInterval{ &kCheckCacheForQueuedRequests, "queued_requests_cache_check_interval", base::Milliseconds(100)}; // Cache check is only valid for requests queued for long than this threshold. -constexpr base::FeatureParam<base::TimeDelta> +const base::FeatureParam<base::TimeDelta> kQueuedRequestsCacheCheckTimeThreshold{ &kCheckCacheForQueuedRequests, "queued_requests_cache_check_time_threshold", base::Milliseconds(100)}; diff --git a/chromium/third_party/blink/renderer/core/inspector/inspector_trace_events.h b/chromium/third_party/blink/renderer/core/inspector/inspector_trace_events.h index 728fd11f4e0..2edfb0413c5 100644 --- a/chromium/third_party/blink/renderer/core/inspector/inspector_trace_events.h +++ b/chromium/third_party/blink/renderer/core/inspector/inspector_trace_events.h @@ -23,6 +23,10 @@ #include "third_party/blink/renderer/platform/wtf/functional.h" #include "v8/include/v8.h" +#ifndef CR_EXPAND_ARG +#define CR_EXPAND_ARG(x) x +#endif + namespace base { class UnguessableToken; } diff --git a/chromium/third_party/blink/renderer/core/layout/table_layout_algorithm_auto.cc b/chromium/third_party/blink/renderer/core/layout/table_layout_algorithm_auto.cc index 42bea3f00c5..5a520ba3b58 100644 --- a/chromium/third_party/blink/renderer/core/layout/table_layout_algorithm_auto.cc +++ b/chromium/third_party/blink/renderer/core/layout/table_layout_algorithm_auto.cc @@ -658,7 +658,7 @@ void TableLayoutAlgorithmAuto::InsertSpanCell(LayoutTableCell* cell) { return; unsigned size = span_cells_.size(); - if (!size || span_cells_[size - 1] != 0) { + if (!size || span_cells_[size - 1] != nullptr) { span_cells_.Grow(size + 10); for (unsigned i = 0; i < 10; i++) span_cells_[size + i] = nullptr; diff --git a/chromium/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc b/chromium/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc index 9a56ba5043b..3a20e6823db 100644 --- a/chromium/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc +++ b/chromium/third_party/blink/renderer/modules/canvas/canvas2d/canvas_path.cc @@ -533,7 +533,6 @@ void CanvasPath::roundRect( #if !defined(COMPILER_MSVC) gfx::SizeF r[num_radii]; #else - std::assert(num_radii <= 4); gfx::SizeF r[4]; #endif for (int i = 0; i < num_radii; ++i) { diff --git a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_hash_table_backing.h b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_hash_table_backing.h index f657d4facca..3fb5dea1f4f 100644 --- a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_hash_table_backing.h +++ b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_hash_table_backing.h @@ -43,6 +43,8 @@ class HeapHashTableBacking final ALWAYS_INLINE static ClassType* FromArray(ValueType* array) { return reinterpret_cast<ClassType*>(array); } + void operator delete(void* p) { delete (WTF::ConditionalDestructor<HeapHashTableBacking<Table>, + std::is_trivially_destructible<typename Table::ValueType>::value>*)p; } void Free(cppgc::HeapHandle& heap_handle) { cppgc::subtle::FreeUnreferencedObject(heap_handle, *this); diff --git a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector.h b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector.h index b1cbb9800f3..6ccf581f6ac 100644 --- a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector.h +++ b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector.h @@ -22,6 +22,9 @@ class HeapVector final : public GarbageCollected<HeapVector<T, inlineCapacity>>, public: HeapVector() = default; + void operator delete(void* p) { delete + (Vector<T, inlineCapacity, HeapAllocator>*)p; } + explicit HeapVector(wtf_size_t size) : Vector<T, inlineCapacity, HeapAllocator>(size) { CheckType(); diff --git a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h index 46e8d26d521..541bebcaeaa 100644 --- a/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h +++ b/chromium/third_party/blink/renderer/platform/heap/collection_support/heap_vector_backing.h @@ -52,6 +52,10 @@ class HeapVectorBacking final return reinterpret_cast<ClassType*>(payload); } + void operator delete(void* p) { delete + (WTF::ConditionalDestructor<HeapVectorBacking<T, Traits>, + !Traits::kNeedsDestruction>*)p; } + void Free(cppgc::HeapHandle& heap_handle) { cppgc::subtle::FreeUnreferencedObject(heap_handle, *this); } diff --git a/chromium/third_party/blink/renderer/platform/heap/heap_allocator_impl.h b/chromium/third_party/blink/renderer/platform/heap/heap_allocator_impl.h index 5e9f9a002c5..1f2771caaf4 100644 --- a/chromium/third_party/blink/renderer/platform/heap/heap_allocator_impl.h +++ b/chromium/third_party/blink/renderer/platform/heap/heap_allocator_impl.h @@ -65,6 +65,11 @@ class PLATFORM_EXPORT HeapAllocator { } template <typename T> + static void Free(T* array) { +// UNREACHABLE(); + } + + template <typename T> static bool ExpandVectorBacking(T* array, size_t new_size) { DCHECK(array); return HeapVectorBacking<T>::FromArray(array)->Resize(new_size); diff --git a/chromium/third_party/blink/renderer/platform/wtf/math_extras.h b/chromium/third_party/blink/renderer/platform/wtf/math_extras.h index 55e6a8b0fb5..7cdca4e97b3 100644 --- a/chromium/third_party/blink/renderer/platform/wtf/math_extras.h +++ b/chromium/third_party/blink/renderer/platform/wtf/math_extras.h @@ -127,11 +127,11 @@ constexpr float Grad2turn(float g) { return g * (1.0f / 400.0f); } -constexpr double RoundHalfTowardsPositiveInfinity(double value) { +inline double RoundHalfTowardsPositiveInfinity(double value) { return std::floor(value + 0.5); } -constexpr float RoundHalfTowardsPositiveInfinity(float value) { +inline float RoundHalfTowardsPositiveInfinity(float value) { return std::floor(value + 0.5f); } diff --git a/chromium/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn b/chromium/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn index 332a28a9de3..1e701a29296 100644 --- a/chromium/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn +++ b/chromium/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn @@ -42,7 +42,7 @@ action("build_inspector_overlay") { args = [ "main.js", - "70000", # max_size in bytes + "80000", # max_size in bytes "--input_path", rebase_path(target_gen_dir, root_build_dir), "--output_path", diff --git a/chromium/ui/base/BUILD.gn b/chromium/ui/base/BUILD.gn index 1ec3d746f56..9a2a79a39d0 100644 --- a/chromium/ui/base/BUILD.gn +++ b/chromium/ui/base/BUILD.gn @@ -619,6 +619,8 @@ jumbo_component("base") { "dragdrop/os_exchange_data_provider_win.h", "resource/resource_bundle_win.cc", "resource/resource_bundle_win.h", + "win/win_cursor_factory.cc", + "win/win_cursor_factory.h", ] } } diff --git a/chromium/ui/color/color_id_map_macros.inc b/chromium/ui/color/color_id_map_macros.inc index ba0d794a545..375acd8ae7e 100644 --- a/chromium/ui/color/color_id_map_macros.inc +++ b/chromium/ui/color/color_id_map_macros.inc @@ -18,7 +18,8 @@ { enum_name, #enum_name } #define E_CPONLY(...) E(__VA_ARGS__) #define GET_E(_1, _2, _3, macro_name, ...) macro_name -#define E(...) GET_E(__VA_ARGS__, E3, E2, E1)(__VA_ARGS__), +#define EXPAND_E(x) x +#define E(...) EXPAND_E(GET_E(__VA_ARGS__, E3, E2, E1)(__VA_ARGS__)), #else #undef E1 @@ -26,5 +27,6 @@ #undef E3 #undef E_CPONLY #undef GET_E +#undef EXPAND_E #undef E #endif |