mercredi 22 mai 2019

Why does std::bind accept more arguments than possible for bound function?

I was interested in learning more about the behaviour of std::bind() with member functions, and thought it was odd for MSVC to compile the following code when no other compiler I tried would. Is MSVC wrong to compile this?

I tried GCC, CLang, and some other minor compilers in the compiler explorer side-by-side with MSVC: https://godbolt.org/z/DNtP-o

Only MSVC would compile this:

#include <functional>

struct S{
    void f(int){}
};

int main(){
    S s;
    auto binding = std::bind(&S::f,s, 5,3);

    return 0;
}

These are the errors I get from compiling with 'x86-64 clang 8.0.0':

error: static_assert failed due to requirement 'integral_constant<bool, false>::value ? sizeof...(_BoundArgs) >= integral_constant<unsigned long, 1>::value + 1 : sizeof...(_BoundArgs) == integral_constant<unsigned long, 1>::value + 1' "Wrong number of arguments for pointer-to-member"

error: no matching function for call to 'bind'

Aucun commentaire:

Enregistrer un commentaire