Атрибут компилятора застрял в типе функции — есть ли обходной путь для этой ошибки clang-cl?

При использовании конфигурации C ++ LLVM-vs2014 в Visual Studio 2015 это статическое утверждение не выполняется. Утверждение не терпит неудачу в clang ++, gcc или даже Visual C ++. thiscall Атрибут привязан к типу функции, хотя он больше не применим. Я подал отчет об ошибке, но я хотел бы знать, есть ли способ принудительного удаления атрибута за это время. Можно thiscall удалить?

#include <type_traits>

template<typename T>
struct remove_member_pointer;

template<typename T, typename U>
struct remove_member_pointer<T U::*> {
using type = T;
};

struct foo;

using input = void(foo::*)();
using expect = void();
using result = typename remove_member_pointer<input>::type;

//This static_assert fails because there is a
//compiler-generated attribute left behind, making
//the type of result actually `void () __attribute__((thiscall))`
static_assert(std::is_same<result, expect>{}, "");

int main() { return{}; }

Сообщество Microsoft Visual Studio 2015
Версия 14.0.24720.00 Обновление 1

2

Решение

Я не нашел обходного пути для VS 2015 Update 1, но эта проблема, похоже, исправлена ​​в VS 2015 Update 2.

0

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

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

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