Skip to content

Commit 5e1b063

Browse files
authored
IReference operators need to go into the level-1 header (#906)
1 parent 8684e14 commit 5e1b063

File tree

6 files changed

+42
-39
lines changed

6 files changed

+42
-39
lines changed

cppwinrt/code_writers.h

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3248,19 +3248,12 @@ struct __declspec(empty_bases) produce_dispatch_to_overridable<T, D, %>
32483248
type);
32493249
}
32503250

3251-
static void write_namespace_special(writer& w, std::string_view const& namespace_name, cache const& c)
3251+
static void write_namespace_special(writer& w, std::string_view const& namespace_name)
32523252
{
32533253
if (namespace_name == "Windows.Foundation")
32543254
{
3255-
if (c.find("Windows.Foundation.PropertyValue"))
3256-
{
3257-
w.write(strings::base_reference_produce);
3258-
}
3259-
if (c.find("Windows.Foundation.Deferral"))
3260-
{
3261-
w.write(strings::base_deferral);
3262-
}
3263-
3255+
w.write(strings::base_reference_produce);
3256+
w.write(strings::base_deferral);
32643257
w.write(strings::base_coroutine_foundation);
32653258
}
32663259
else if (namespace_name == "Windows.Foundation.Collections")
@@ -3292,4 +3285,12 @@ struct __declspec(empty_bases) produce_dispatch_to_overridable<T, D, %>
32923285
w.write(strings::base_xaml_typename);
32933286
}
32943287
}
3288+
3289+
static void write_namespace_special_1(writer& w, std::string_view const& namespace_name)
3290+
{
3291+
if (namespace_name == "Windows.Foundation")
3292+
{
3293+
w.write(strings::base_reference_produce_1);
3294+
}
3295+
}
32953296
}

cppwinrt/cppwinrt.vcxproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@
7575
<ClInclude Include="..\strings\base_meta.h" />
7676
<ClInclude Include="..\strings\base_natvis.h" />
7777
<ClInclude Include="..\strings\base_reference_produce.h" />
78+
<ClInclude Include="..\strings\base_reference_produce_1.h" />
7879
<ClInclude Include="..\strings\base_security.h" />
7980
<ClInclude Include="..\strings\base_std_hash.h" />
8081
<ClInclude Include="..\strings\base_string.h" />

cppwinrt/cppwinrt.vcxproj.filters

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@
115115
<ClInclude Include="..\strings\base_reference_produce.h">
116116
<Filter>strings</Filter>
117117
</ClInclude>
118+
<ClInclude Include="..\strings\base_reference_produce_1.h">
119+
<Filter>strings</Filter>
120+
</ClInclude>
118121
<ClInclude Include="..\strings\base_security.h">
119122
<Filter>strings</Filter>
120123
</ClInclude>

cppwinrt/file_writers.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ namespace cppwinrt
127127
auto wrap_type = wrap_type_namespace(w, ns);
128128
w.write_each<write_interface>(members.interfaces);
129129
}
130+
write_namespace_special_1(w, ns);
130131

131132
write_close_file_guard(w);
132133
w.swap();
@@ -201,7 +202,7 @@ namespace cppwinrt
201202
w.write_each<write_std_hash>(members.classes);
202203
}
203204

204-
write_namespace_special(w, ns, c);
205+
write_namespace_special(w, ns);
205206

206207
write_close_file_guard(w);
207208
w.swap();

strings/base_reference_produce.h

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -397,35 +397,7 @@ namespace winrt::impl
397397
static auto make(array_view<Windows::Foundation::Rect const> const& value) { return Windows::Foundation::PropertyValue::CreateRectArray(value); }
398398
using itf = Windows::Foundation::IReferenceArray<Windows::Foundation::Rect>;
399399
};
400-
}
401-
402-
WINRT_EXPORT namespace winrt::Windows::Foundation
403-
{
404-
template <typename T>
405-
bool operator==(IReference<T> const& left, IReference<T> const& right)
406-
{
407-
if (get_abi(left) == get_abi(right))
408-
{
409-
return true;
410-
}
411-
412-
if (!left || !right)
413-
{
414-
return false;
415-
}
416400

417-
return left.Value() == right.Value();
418-
}
419-
420-
template <typename T>
421-
bool operator!=(IReference<T> const& left, IReference<T> const& right)
422-
{
423-
return !(left == right);
424-
}
425-
}
426-
427-
namespace winrt::impl
428-
{
429401
template <typename T, typename From>
430402
T unbox_value_type(From&& value)
431403
{

strings/base_reference_produce_1.h

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
WINRT_EXPORT namespace winrt::Windows::Foundation
3+
{
4+
template <typename T>
5+
bool operator==(IReference<T> const& left, IReference<T> const& right)
6+
{
7+
if (get_abi(left) == get_abi(right))
8+
{
9+
return true;
10+
}
11+
12+
if (!left || !right)
13+
{
14+
return false;
15+
}
16+
17+
return left.Value() == right.Value();
18+
}
19+
20+
template <typename T>
21+
bool operator!=(IReference<T> const& left, IReference<T> const& right)
22+
{
23+
return !(left == right);
24+
}
25+
}

0 commit comments

Comments
 (0)