I have a following use case which is causing clang to emit errors.
#include <iostream>
#include <type_traits>
class A
{
    public:
        int x;
        A(int g):x(g){}
};
class B : public A
{
    public:
        int y;
        B(int p):A(p),y(p) {}
};
class Holder
{
    template<typename T>
        Holder(typename std::enable_if<!std::is_same<T,A>::value
                     && std::is_base_of< A , T>::value >::type&& val)
        : b (std::forward<T>(val))
        {}
    private:
        B b;
};
int main()
{
    B b(10);
    Holder h(b);
}
The error is as follows
forward.cpp:35:12: error: no matching constructor for initialization of 'Holder'
    Holder h(b);
           ^ ~
forward.cpp:18:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'B' to 'const Holder' for 1st argument
class Holder
      ^
forward.cpp:18:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'B' to 'Holder' for 1st argument
class Holder
      ^
forward.cpp:21:9: note: candidate template ignored: couldn't infer template argument 'T'
        Holder(typename std::enable_if<!std::is_same<T,A>::value
        ^
1 error generated.
when compiled with clang++ --std=c++11 forward.cpp.
What am I missing here?
I have already consulted this and this questions, however they didnt seem to solve my use case.
 
     
    