std :: is_member_function_pointer не работает для функций-членов noexcept - PullRequest
0 голосов
/ 30 января 2019

У меня проблемы с std::is_member_function_pointer.Насколько я могу судить, это не работает, если дана noexcept функция-член.Я не могу найти ничего в стандарте, заявляя, что он не работает для noexcept квалифицированных функций-членов.Пример проблемы:

#include <type_traits>

class A {
public:
    void member() noexcept { }
};

int main()
{
    // fails at compile time if A::member is a data member and not a function
    static_assert(std::is_member_function_pointer<decltype(&A::member)>::value,
                  "A::member is not a member function."); 
}

Это дает мне следующую ошибку:

member.cpp: 11: 5: ошибка: статическая ошибка не выполнена из-за требования 'std :: is_member_function_pointer:: value '"A :: member не является функцией-членом."static_assert (std :: is_member_function_pointer :: value, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 генерируется ошибка.

Если я удаляю квалификацию noexcept, она компилируется так, как должна.

Это было протестировано на Debian Stretch с использованием clang 6.0 и libstdc ++ 6.3.0 Я что-то здесь упускаю? Из того, что я могу прочитать, этот должен работать.

1 Ответ

0 голосов
/ 28 марта 2019

Ваш код компилируется на GodBolt - с noexcept на члене и без него - со всеми MSVC 2017, GCC 5.5, 6.x, 8.x, clang 5, 6, 7.

На моем Debian Stretch (ну, соответствующий Devuan на самом деле) - я могу воспроизвести проблему.Интересно, что компиляция завершится неудачно, даже если я переключусь на libc ++.

Итак:

  • Это не ошибка в clang-6 in-and-of-the
  • Thisэто не ошибка libstdc ++ 6.3.0 сама по себе
  • Это может быть связано с тем, как все было настроено / настроено для Debian Stretch.Я предлагаю поднять это на канале #debian на irc.freenode.net
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...