in cppwinrt/code_writers.h [2343:2392]
static void write_class_usings(writer& w, TypeDef const& type)
{
auto type_name = type.TypeName();
auto default_interface = get_default_interface(type);
auto default_interface_name = w.write_temp("%", default_interface);
std::map<std::string_view, std::set<std::string>> method_usage;
for (auto&& [interface_name, info] : get_interfaces(w, type))
{
if (info.defaulted && !info.base)
{
for (auto&& method : info.type.MethodList())
{
method_usage[get_name(method)].insert(default_interface_name);
}
}
else
{
for (auto&& method : info.type.MethodList())
{
method_usage[get_name(method)].insert(interface_name);
}
}
}
for (auto&& [method_name, interfaces] : method_usage)
{
if (interfaces.size() <= 1)
{
continue;
}
for (auto&& interface_name : interfaces)
{
if (default_interface_name == interface_name)
{
w.write(" using %::%;\n",
interface_name,
method_name);
}
else
{
w.write(" using impl::consume_t<%, %>::%;\n",
type_name,
interface_name,
method_name);
}
}
}
}