Skip to content

Got MSVC error C2248 when I use unique_function with boost::callable_traits::is_invocable #193

@redboltz

Description

@redboltz

When I use boost::callable_traits::is_invocable with fu2::unique_function on msvc v19.33 or older, I got C2248 (cannot access private member) error.
When I replace boost::callable_traits::is_invocable with std::is_invocable (since C++17), then the error is disappeared.

#include <function2/function2.hpp>
#include <boost/callable_traits.hpp>
#include <type_traits>

using unique_func_t = fu2::unique_function<void()>;

int main() {
    // no error with std::is_invocable
    static_assert(std::is_invocable<unique_func_t>::value);
    // error C2248 with boost::callable_traits::is_invocable
    static_assert(boost::callable_traits::is_invocable<unique_func_t>::value);
}

Godbolt link: https://godbolt.org/z/vM19nhfv7

At first, I report the issue to function2.
See Naios/function2#54

The issue happens the combination of boost::callable_traits::is_invocable, fu2::unique_function, and msvc v19.33 or older.
It is complecated for me but fortunately, we can reproduce the issue on godbolt.

So I report the issue here too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions