Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

The generated 'operator==' of a struct with an 'IReference<T>' member is sensitive to inclusion/include order #801

Copy link
Copy link
@dunhor

Description

@dunhor
Issue body actions

E.g. consider the following:

namespace Component
{
    struct Test
    {
        IReference<Int32> member;
    };
}

Then the generated file winrt/impl/Component.2.h will include an operator== definition that looks something like:

    inline bool operator==(Test const& left, Test const& right) noexcept
    {
        return left.member == right.member;
    }

It seems that the intended functionality is that the above uses the operator== defined for IReference<T>:

    template <typename T>
    bool operator==(IReference<T> const& left, IReference<T> const& right)
    {
        if (get_abi(left) == get_abi(right))
        {
            return true;
        }

        if (!left || !right)
        {
            return false;
        }

        return left.Value() == right.Value();
    }

This works fine, however the issue lies in the fact that the above operator== for IReference<T> is defined in winrt/Windows.Foundation.h. This file is included by neither winrt/Component.h nor winrt/impl/Component.2.h. Both - curiously enough - include winrt/impl/Windows.Foundation.2.h, however the desired function definition is not present in this file.

The end result is that winrt/Windows.Foundation.h must be explicitly included before winrt/Component.h for it to work properly.

Reactions are currently unavailable

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      Morty Proxy This is a proxified and sanitized view of the page, visit original site.