@@ -45,13 +45,23 @@ using namespace yup;
4545namespace
4646{
4747
48+ // MSVC strict-mode C++20 two-phase lookup fails to parse 4-argument template
49+ // instantiations with dependent types inside template struct bodies (C2059).
50+ // These 2-arg namespace-scope aliases sidestep that by reducing each problematic
51+ // 4-arg Pointer<Format, Endian, Interleaving, Constness> to a 2-arg wrapper.
52+ template <class Format , class Endian >
53+ using ADNonInterleavedWritable = AudioData::Pointer<Format, Endian, AudioData::NonInterleaved, AudioData::NonConst>;
54+
55+ template <class Format , class Endian >
56+ using ADNonInterleavedConst = AudioData::Pointer<Format, Endian, AudioData::NonInterleaved, AudioData::Const>;
57+
4858template <class F1 , class E1 , class F2 , class E2 >
4959struct RoundTripConversionTest
5060{
51- using WritablePtr = AudioData::Pointer <F1, E1 , AudioData::NonInterleaved, AudioData::NonConst >;
52- using ConstPtr = AudioData::Pointer <F1, E1 , AudioData::NonInterleaved, AudioData::Const >;
53- using F2WritablePtr = AudioData::Pointer <F2, E2 , AudioData::NonInterleaved, AudioData::NonConst >;
54- using F2ConstPtr = AudioData::Pointer <F2, E2 , AudioData::NonInterleaved, AudioData::Const >;
61+ using WritablePtr = ADNonInterleavedWritable <F1, E1 >;
62+ using ConstPtr = ADNonInterleavedConst <F1, E1 >;
63+ using F2WritablePtr = ADNonInterleavedWritable <F2, E2 >;
64+ using F2ConstPtr = ADNonInterleavedConst <F2, E2 >;
5565 using FwdConv = AudioData::ConverterInstance<ConstPtr, F2WritablePtr>;
5666 using RevConv = AudioData::ConverterInstance<F2ConstPtr, WritablePtr>;
5767
@@ -108,11 +118,18 @@ struct RoundTripConversionTest
108118 }
109119};
110120
121+ // 3-arg wrappers that fix the same MSVC 4-arg issue in AllEndiannessTest.
122+ template <class F1 , class E1 , class F2 >
123+ using RoundTripBigEndian = RoundTripConversionTest<F1, E1 , F2, AudioData::BigEndian>;
124+
125+ template <class F1 , class E1 , class F2 >
126+ using RoundTripLittleEndian = RoundTripConversionTest<F1, E1 , F2, AudioData::LittleEndian>;
127+
111128template <class F1 , class E1 , class FormatType >
112129struct AllEndiannessTest
113130{
114- using BigTest = RoundTripConversionTest <F1, E1 , FormatType, AudioData::BigEndian >;
115- using LittleTest = RoundTripConversionTest <F1, E1 , FormatType, AudioData::LittleEndian >;
131+ using BigTest = RoundTripBigEndian <F1, E1 , FormatType>;
132+ using LittleTest = RoundTripLittleEndian <F1, E1 , FormatType>;
116133
117134 static void run (Random& r)
118135 {
0 commit comments