Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
ea12b83
VS 2022 17.14 Preview 1.
StephanTLavavej Feb 13, 2025
bf8a29d
Remove workaround for DevCom-10373274.
StephanTLavavej Feb 13, 2025
fe7af9d
Remove workaround for DevCom-10808176.
StephanTLavavej Feb 13, 2025
6f950a7
Remove `#ifdef __cpp_static_call_operator` from `P1169R4_static_call_…
StephanTLavavej Feb 14, 2025
e5a6616
Guard std::function CTAD for static call operators with _HAS_CXX23.
StephanTLavavej Feb 14, 2025
a7632e7
Suppress MSVC Future Technology warnings C5280 and C5281.
StephanTLavavej Feb 14, 2025
485e6eb
Use static call operators downlevel, except for CUDA.
StephanTLavavej Feb 14, 2025
4abb9ae
Enable libcxx tests now that MSVC has implemented P1169R4 static oper…
StephanTLavavej Feb 14, 2025
197db8b
Drop the wmemchr() optimization for unreachable_sentinel_t.
StephanTLavavej Feb 14, 2025
ac837ed
Google Benchmark 1.9.1. (No MS-internal changes needed.)
StephanTLavavej Feb 14, 2025
38db4cc
2025-datacenter-azure-edition.
StephanTLavavej Feb 14, 2025
518a390
Python 3.13.2.
StephanTLavavej Feb 11, 2025
d68d7fc
Send create-1es-hosted-pool.ps1 output to a log file.
StephanTLavavej Feb 15, 2025
c22d345
Fix the CUDA installation by working around GH 5282.
StephanTLavavej Feb 14, 2025
94ee703
New pool.
StephanTLavavej Feb 15, 2025
91fb056
Teach print_failures.py to understand XPASS in XML.
StephanTLavavej Feb 15, 2025
cc41cd3
Fix STL-ASan-CI failures by upgrading bitset.members tests from FAIL …
StephanTLavavej Feb 15, 2025
582cebe
Expand `memchr`/`wmemchr` comments, fix `__std_find_trivial_unsized_2`.
StephanTLavavej Feb 15, 2025
179ba88
Merge branch 'main' into vs17.14p1
StephanTLavavej Feb 19, 2025
7379b1c
Work around the MSVC-internal toolset being 17.12 and not supporting …
StephanTLavavej Feb 19, 2025
6dd4b79
Add an MSVC-internal skip for a test with `ADDITIONAL_COMPILE_FLAGS(c…
StephanTLavavej Feb 19, 2025
d0bd846
Cite CWG-1656 with our usual style, improve wrapping.
StephanTLavavej Feb 19, 2025
18cb897
Code review feedback: clarify memchr/wmemchr comments.
StephanTLavavej Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ __pycache__/
/out/
/tools/out/
/CMakeLists.txt.user
/*.log
*.log
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ Just try to follow these rules, so we can spend more time fixing bugs and implem

# How To Build With The Visual Studio IDE

1. Install Visual Studio 2022 17.13 Preview 4 or later.
1. Install Visual Studio 2022 17.14 Preview 1 or later.
* Select "Windows 11 SDK (10.0.22621.0)" in the VS Installer.
* Select "MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)" in the VS Installer
if you would like to build the ARM64/ARM64EC target.
Expand All @@ -160,7 +160,7 @@ Just try to follow these rules, so we can spend more time fixing bugs and implem

# How To Build With A Native Tools Command Prompt

1. Install Visual Studio 2022 17.13 Preview 4 or later.
1. Install Visual Studio 2022 17.14 Preview 1 or later.
* Select "Windows 11 SDK (10.0.22621.0)" in the VS Installer.
* Select "MSVC v143 - VS 2022 C++ ARM64/ARM64EC build tools (Latest)" in the VS Installer
if you would like to build the ARM64/ARM64EC target.
Expand Down
2 changes: 1 addition & 1 deletion azure-devops/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

variables:
- name: poolName
value: 'StlBuild-2025-01-28T1106-Pool'
value: 'StlBuild-2025-02-15T0137-Pool'
readonly: true
- name: poolDemands
value: 'EnableSpotVM -equals false'
Expand Down
41 changes: 21 additions & 20 deletions azure-devops/create-1es-hosted-pool.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,9 @@ $VMSize = 'Standard_F32as_v6'
$ProtoVMName = 'PROTOTYPE'
$ImagePublisher = 'MicrosoftWindowsServer'
$ImageOffer = 'WindowsServer'
$ImageSku = '2025-datacenter-g2'
$ImageSku = '2025-datacenter-azure-edition'

$LogFile = '1es-hosted-pool.log'
$ProgressActivity = 'Preparing STL CI pool'
$TotalProgress = 26
$CurrentProgress = 1
Expand Down Expand Up @@ -78,13 +79,13 @@ $Env:SuppressAzurePowerShellBreakingChangeWarnings = 'true'

Update-AzConfig `
-DisplayBreakingChangeWarning $false `
-Scope 'Process' | Out-Null
-Scope 'Process' >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Setting the subscription context'

Set-AzContext `
-SubscriptionName 'CPP_STL_GitHub' | Out-Null
-SubscriptionName 'CPP_STL_GitHub' >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating resource group'
Expand All @@ -93,7 +94,7 @@ $ResourceGroupName = 'StlBuild-' + $CurrentDate.ToString('yyyy-MM-ddTHHmm')

New-AzResourceGroup `
-Name $ResourceGroupName `
-Location $Location | Out-Null
-Location $Location >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating credentials'
Expand Down Expand Up @@ -169,7 +170,7 @@ $VM = Set-AzVMBootDiagnostic `
New-AzVm `
-ResourceGroupName $ResourceGroupName `
-Location $Location `
-VM $VM | Out-Null
-VM $VM >> $LogFile

$VM = Get-AzVM `
-ResourceGroupName $ResourceGroupName `
Expand All @@ -192,7 +193,7 @@ if ($ProvisionImageResult.value.Message -cnotmatch 'PROVISION_IMAGE_SUCCEEDED')

Stop-AzVM `
-Id $VM.ID `
-Force | Out-Null
-Force >> $LogFile

Write-Error "VM stopped. Remember to delete unusable resource group: $ResourceGroupName"
}
Expand All @@ -201,7 +202,7 @@ if ($ProvisionImageResult.value.Message -cnotmatch 'PROVISION_IMAGE_SUCCEEDED')
Display-ProgressBar -Status 'Restarting VM'

Restart-AzVM `
-Id $VM.ID | Out-Null
-Id $VM.ID >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Sleeping after restart'
Expand All @@ -216,7 +217,7 @@ Display-ProgressBar -Status 'Running sysprep in VM'
Invoke-AzVMRunCommand `
-ResourceId $VM.ID `
-CommandId 'RunPowerShellScript' `
-ScriptString 'C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown' | Out-Null
-ScriptString 'C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown' >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Waiting for VM to shut down'
Expand All @@ -230,14 +231,14 @@ Display-ProgressBar -Status 'Stopping VM'

Stop-AzVM `
-Id $VM.ID `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Generalizing VM'

Set-AzVM `
-Id $VM.ID `
-Generalized | Out-Null
-Generalized >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating gallery'
Expand All @@ -256,7 +257,7 @@ $ServicePrincipalObjectId = (Get-AzADServicePrincipal -DisplayName '1ES Resource
New-AzRoleAssignment `
-ObjectId $ServicePrincipalObjectId `
-RoleDefinitionName 'Reader' `
-Scope $Gallery.Id | Out-Null
-Scope $Gallery.Id >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating image definition'
Expand All @@ -276,7 +277,7 @@ New-AzGalleryImageDefinition `
-Offer $ImageOffer `
-Sku $ImageSku `
-Feature $ImageDefinitionFeatures `
-HyperVGeneration 'V2' | Out-Null
-HyperVGeneration 'V2' >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating image version'
Expand All @@ -294,7 +295,7 @@ $ImageVersion = New-AzGalleryImageVersion `
Display-ProgressBar -Status 'Registering CloudTest resource provider'

Register-AzResourceProvider `
-ProviderNamespace 'Microsoft.CloudTest' | Out-Null
-ProviderNamespace 'Microsoft.CloudTest' >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating 1ES image'
Expand All @@ -306,7 +307,7 @@ New-AzResource `
-ResourceType 'Microsoft.CloudTest/Images' `
-ResourceName $ImageName `
-Properties @{ 'imageType' = 'SharedImageGallery'; 'resourceId' = $ImageVersion.Id; } `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Creating 1ES Hosted Pool'
Expand All @@ -328,46 +329,46 @@ New-AzResource `
-ResourceType 'Microsoft.CloudTest/hostedpools' `
-ResourceName $PoolName `
-Properties $PoolProperties `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Deleting unused VM'

Remove-AzVM `
-Id $VM.ID `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Deleting unused disk'

Remove-AzDisk `
-ResourceGroupName $ResourceGroupName `
-DiskName $PrototypeOSDiskName `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Deleting unused network interface'

Remove-AzNetworkInterface `
-ResourceGroupName $ResourceGroupName `
-Name $NicName `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Deleting unused virtual network'

Remove-AzVirtualNetwork `
-ResourceGroupName $ResourceGroupName `
-Name $VirtualNetworkName `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Display-ProgressBar -Status 'Deleting unused network security group'

Remove-AzNetworkSecurityGroup `
-ResourceGroupName $ResourceGroupName `
-Name $NetworkSecurityGroupName `
-Force | Out-Null
-Force >> $LogFile

####################################################################################################
Write-Progress -Activity $ProgressActivity -Completed
Expand Down
12 changes: 10 additions & 2 deletions azure-devops/provision-image.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,13 @@ foreach ($workload in $VisualStudioWorkloads) {
$PowerShellUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.5.0/PowerShell-7.5.0-win-x64.msi'
$PowerShellArgs = @('/quiet', '/norestart')

$PythonUrl = 'https://www.python.org/ftp/python/3.13.1/python-3.13.1-amd64.exe'
$PythonUrl = 'https://www.python.org/ftp/python/3.13.2/python-3.13.2-amd64.exe'
$PythonArgs = @('/quiet', 'InstallAllUsers=1', 'PrependPath=1', 'CompileAll=1', 'Include_doc=0')

# TRANSITION, GH-5282: Install only nvcc and cudart, then manually add CUDA to the PATH (see below).
$CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_551.61_windows.exe'
$CudaArgs = @('-s', '-n', 'nvcc_12.4')
$CudaArgs = @('-s', '-n', 'nvcc_12.4', 'cudart_12.4')
$CudaPath = 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.4\bin'

<#
.SYNOPSIS
Expand Down Expand Up @@ -112,6 +114,12 @@ DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args $CudaArgs

Write-Host 'Setting environment variables...'

# TRANSITION, GH-5282: Manually add CUDA to the PATH.
# Don't use $Env:PATH here - that's the local path for this running script, captured before we installed anything.
# The machine path was just updated by the installers above.
$machinePath = [Environment]::GetEnvironmentVariable('Path', 'Machine')
[Environment]::SetEnvironmentVariable('Path', "$machinePath;$CudaPath", 'Machine')

# The STL's PR/CI builds are totally unrepresentative of customer usage.
[Environment]::SetEnvironmentVariable('VSCMD_SKIP_SENDTELEMETRY', '1', 'Machine')

Expand Down
2 changes: 1 addition & 1 deletion benchmarks/google-benchmark
Submodule google-benchmark updated 39 files
+1 βˆ’1 .github/workflows/bazel.yml
+1 βˆ’1 .github/workflows/build-and-test-min-cmake.yml
+1 βˆ’1 .github/workflows/clang-format-lint.yml
+1 βˆ’1 .github/workflows/clang-tidy.yml
+1 βˆ’1 .github/workflows/pre-commit.yml
+6 βˆ’6 .github/workflows/test_bindings.yml
+14 βˆ’4 .github/workflows/wheels.yml
+4 βˆ’4 .pre-commit-config.yaml
+1 βˆ’1 BUILD.bazel
+8 βˆ’4 CMakeLists.txt
+7 βˆ’6 MODULE.bazel
+1 βˆ’1 bazel/benchmark_deps.bzl
+7 βˆ’1 bindings/python/google_benchmark/BUILD
+2 βˆ’1 bindings/python/google_benchmark/__init__.py
+4 βˆ’4 bindings/python/google_benchmark/benchmark.cc
+1 βˆ’0 bindings/python/google_benchmark/example.py
+0 βˆ’7 bindings/python/google_benchmark/version.py
+2 βˆ’2 cmake/GoogleTest.cmake.in
+1 βˆ’1 cmake/benchmark.pc.in
+1 βˆ’1 cmake/benchmark_main.pc.in
+6 βˆ’0 docs/dependencies.md
+13 βˆ’6 docs/releasing.md
+13 βˆ’4 docs/user_guide.md
+53 βˆ’3 include/benchmark/benchmark.h
+8 βˆ’17 pyproject.toml
+37 βˆ’16 setup.py
+24 βˆ’4 src/benchmark.cc
+5 βˆ’4 src/benchmark_api_internal.cc
+2 βˆ’1 src/benchmark_api_internal.h
+40 βˆ’26 src/benchmark_runner.cc
+0 βˆ’7 src/benchmark_runner.h
+11 βˆ’5 src/colorprint.cc
+4 βˆ’8 src/complexity.cc
+1 βˆ’3 src/perf_counters.cc
+6 βˆ’0 src/sysinfo.cc
+1 βˆ’1 test/BUILD
+1 βˆ’0 test/CMakeLists.txt
+42 βˆ’0 test/profiler_manager_gtest.cc
+10 βˆ’3 test/profiler_manager_test.cc
14 changes: 7 additions & 7 deletions stl/inc/__msvc_bit_utils.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -337,19 +337,19 @@ constexpr decltype(auto) _Select_countr_zero_impl(_Fn _Callback) {
#if _HAS_TZCNT_BSF_INTRINSICS && _HAS_CXX20
if (!_STD is_constant_evaluated()) {
#ifdef __AVX2__
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Countr_zero_tzcnt(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Countr_zero_tzcnt(_Val); });
#else // ^^^ AVX2 / not AVX2 vvv
const bool _Definitely_have_tzcnt = __isa_available >= _Stl_isa_available_avx2;
if (_Definitely_have_tzcnt) {
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Countr_zero_tzcnt(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Countr_zero_tzcnt(_Val); });
} else {
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Countr_zero_bsf(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Countr_zero_bsf(_Val); });
}
#endif // ^^^ not AVX2 ^^^
}
#endif // ^^^ _HAS_TZCNT_BSF_INTRINSICS && _HAS_CXX20 ^^^
// C++17 constexpr gcd() calls this function, so it should be constexpr unless we detect runtime evaluation.
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Countr_zero_fallback(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Countr_zero_fallback(_Val); });
}

template <class _Ty, enable_if_t<_Is_standard_unsigned_integer<_Ty>, int> = 0>
Expand All @@ -376,13 +376,13 @@ _CONSTEXPR20 decltype(auto) _Select_popcount_impl(_Fn _Callback) {
#if !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE
const bool _Definitely_have_popcnt = __isa_available >= _Stl_isa_available_sse42;
if (!_Definitely_have_popcnt) {
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Popcount_fallback(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Popcount_fallback(_Val); });
}
#endif // ^^^ !_POPCNT_INTRINSICS_ALWAYS_AVAILABLE ^^^
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Unchecked_popcount(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Unchecked_popcount(_Val); });
}
#endif // ^^^ _HAS_POPCNT_INTRINSICS ^^^
return _Callback([](_Ty _Val) _STATIC_CALL_OPERATOR { return _Popcount_fallback(_Val); });
return _Callback([](_Ty _Val) _STATIC_LAMBDA { return _Popcount_fallback(_Val); });
}

#undef _HAS_POPCNT_INTRINSICS
Expand Down
2 changes: 1 addition & 1 deletion stl/inc/__msvc_ranges_to.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1145,7 +1145,7 @@ namespace ranges {
"the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)");
}
} else if constexpr (input_range<range_reference_t<_Rng>>) {
const auto _Xform = [](auto&& _Elem) _STATIC_CALL_OPERATOR {
const auto _Xform = [](auto&& _Elem) _STATIC_LAMBDA {
return _RANGES to<range_value_t<_Container>>(_STD forward<decltype(_Elem)>(_Elem));
};
return _RANGES to<_Container>(views::transform(ref_view{_Range}, _Xform), _STD forward<_Types>(_Args)...);
Expand Down
2 changes: 1 addition & 1 deletion stl/inc/__msvc_ranges_tuple_formatter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,7 @@ class basic_format_arg {
template <class _Ty>
explicit handle(_Ty& _Val) noexcept
: _Ptr(_STD addressof(_Val)), _Format([](basic_format_parse_context<_CharType>& _Parse_ctx,
_Context& _Format_ctx, const void* _Ptr) _STATIC_CALL_OPERATOR {
_Context& _Format_ctx, const void* _Ptr) _STATIC_LAMBDA {
using _Td = remove_const_t<_Ty>;
// doesn't drop const-qualifier per an unnumbered LWG issue
using _Tq = conditional_t<_Formattable_with<const _Ty, _Context>, const _Ty, _Ty>;
Expand Down
2 changes: 1 addition & 1 deletion stl/inc/experimental/filesystem
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,7 @@ public:
path& append(const basic_string<_Elem, _Traits, _Alloc>& _Str0) { // append arbitrary source string
string_type _Str(_Str0.size(), L'\0');
// convert _Elem and '/' to '\'
_STD transform(_Str0.begin(), _Str0.end(), _Str.begin(), [](const _Elem _Ch) _STATIC_CALL_OPERATOR {
_STD transform(_Str0.begin(), _Str0.end(), _Str.begin(), [](const _Elem _Ch) _STATIC_LAMBDA {
auto _Wch = static_cast<wchar_t>(_Ch);
if (_Wch == _FS_SLASH) {
_Wch = _FS_PREF;
Expand Down
4 changes: 2 additions & 2 deletions stl/inc/functional
Original file line number Diff line number Diff line change
Expand Up @@ -1237,7 +1237,7 @@ _NON_MEMBER_CALL(_FUNCTION_POINTER_DEDUCTION_GUIDE, X1, X2, X3)
template <class _Fx, class _Call_op, class = void>
struct _Deduce_from_call_operator : _Is_memfunptr<_Call_op>::_Guide_type {}; // N4958 [func.wrap.func.con]/16.1

#ifdef __cpp_static_call_operator
#if _HAS_CXX23
template <class>
struct _Inspect_static_call_operator {};

Expand All @@ -1257,7 +1257,7 @@ _NON_MEMBER_CALL(_STATIC_CALL_OPERATOR_GUIDES, , , noexcept)
template <class _Fx, class _Call_op>
struct _Deduce_from_call_operator<_Fx, _Call_op, void_t<decltype(_STD declval<_Fx>().operator())>>
: _Inspect_static_call_operator<_Call_op> {}; // N4958 [func.wrap.func.con]/16.2
#endif // ^^^ defined(__cpp_static_call_operator) ^^^
#endif // _HAS_CXX23

template <class _Fx, class = void>
struct _Deduce_signature {}; // can't deduce signature when &_Fx::operator() is missing, inaccessible, or ambiguous
Expand Down
6 changes: 3 additions & 3 deletions stl/inc/memory_resource
Original file line number Diff line number Diff line change
Expand Up @@ -553,9 +553,9 @@ namespace pmr {
// find the pool from which to allocate a block with size _Bytes and alignment _Align
const size_t _Size = (_STD max)(_Bytes + sizeof(void*), _Align);
const auto _Log_of_size = static_cast<unsigned char>(_Ceiling_of_log_2(_Size));
return {_STD lower_bound(_Pools.begin(), _Pools.end(), _Log_of_size,
[](const _Pool& _Al, const unsigned char _Log)
_STATIC_CALL_OPERATOR { return _Al._Log_of_size < _Log; }),
return {
_STD lower_bound(_Pools.begin(), _Pools.end(), _Log_of_size,
[](const _Pool& _Al, const unsigned char _Log) _STATIC_LAMBDA { return _Al._Log_of_size < _Log; }),
_Log_of_size};
}

Expand Down
2 changes: 1 addition & 1 deletion stl/inc/mutex
Original file line number Diff line number Diff line change
Expand Up @@ -480,7 +480,7 @@ public:
: _MyMutexes(_Mtxes...) {} // construct but don't lock

~scoped_lock() noexcept {
_STD apply([](_Mutexes&... _Mtxes) _STATIC_CALL_OPERATOR { (..., (void) _Mtxes.unlock()); }, _MyMutexes);
_STD apply([](_Mutexes&... _Mtxes) _STATIC_LAMBDA { (..., (void) _Mtxes.unlock()); }, _MyMutexes);
}

scoped_lock(const scoped_lock&) = delete;
Expand Down
Loading