Наследование конструкторов (GCC и clang не согласны)

Я пытаюсь настроить std::function и начиная со следующего кода:

#include <functional>

template <typename>
struct my_function;

template <typename R, typename... Args>
struct my_function<R(Args...)> : std::function<R(Args...)> {
using base = std::function<R(Args...)>;

using base::function;
};

int main() {
my_function<int(int)> f = nullptr;
}

Я ожидаю, что конструктор из std::function это занимает std::nullptr_t объект наследуется my_function, Итак, код должен хорошо скомпилироваться. В то время как GCC 5.2 (C ++ 14) не имеет проблем при компиляции кода, clang 3.6 (C ++ 14) выдает следующее сообщение об ошибке, которое весьма запутанно:

n file included from main.cpp:1:
/usr/include/c++/v1/functional:1454:41: error: no type named 'type' in 'std::__1::enable_if<false, void>'; 'enable_if' cannot be used to disable this declaration
__callable<_Fp>::value &&
^~~~~~~~~~~~~~~~~~~~~~~~~
main.cpp:10:15: note: in instantiation of member function 'std::__1::function<int (int)>::function' requested here
using base::function;
^
main.cpp:14:25: note: while substituting deduced template arguments into function template 'my_function' [with _Fp = nullptr_t]
my_function<int(int)> f = nullptr;
^
1 error generated.

Это ошибка clang или мой код просто неверный? Если (к счастью) последнее верно, как мне исправить код?

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]