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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions