Size: a a a

2020 May 17

A

ARCHANGEL in pro.cxx
Парни, подскажите по llvm. У меня есть кастомный язык, я хочу его преобразовывать у сорцы с++. Правила преобразования есть и известны. Мне нужно взять libtool и наваять frontend llvm, и всё будет? Или всё сложнее?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Artöm Bakri Al-Sarmini
Есть шаблонная функция
template <typename T>
auto func(T&& t) -> make_u<T> {
   return std::forward<T>(t);
}

Метафункция make_u преобразует тип T в U, неважно как. Для всех нужных T находится правильный U.
Эта функция косвенно используется в другом месте для вычисления типа в другой функции. Она инстанцируется типом V. У типа V есть операция преобразования в make_u<V> без тела (только объявление).
Теперь к сути. Я точно знаю, что инстанция func с V нужна только для меты, ее тело не нужно, вызов func<V> есть только в unevaluated контексте. Гцц этого не понимает и фэйлит линковку, кланг понимает. Что делать с гцц?
Решил проблему - повезло, что в том коде можно не инстанцировать func. Правда нужно переходить на 17, где есть if constexpr, или писать обертку для функтора с перегруженным operator(). Ну, лучше, чем ничего
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
А не, не решил. Но начало положено
источник

A

AlexWhite in pro.cxx
Всем привет.  Хочу использовать json либу, но ругается на эту строчку
 static_cast<double>(j.m_value.number_float) <= static_cast<double>(std::numeric_limits<float>::max())
источник

A

AlexWhite in pro.cxx
в json либе
источник

VD

Vlad Doc in pro.cxx
AlexWhite
Всем привет.  Хочу использовать json либу, но ругается на эту строчку
 static_cast<double>(j.m_value.number_float) <= static_cast<double>(std::numeric_limits<float>::max())
Стандарт с которым собираешь?
источник

A

AlexWhite in pro.cxx
17
источник

VD

Vlad Doc in pro.cxx
И текст ошибки можно?
источник

VD

Vlad Doc in pro.cxx
Телепаты уехали
источник

A

AlexWhite in pro.cxx
Ошибка  C2589  (: недопустимая лексема справа от "::"    json.h  12209
источник

VD

Vlad Doc in pro.cxx
AlexWhite
Ошибка  C2589  (: недопустимая лексема справа от "::"    json.h  12209
#include <limits> в файле есть?
источник

A

AlexWhite in pro.cxx
Поставил, не помогло
источник

AP

Antony Polukhin in pro.cxx
AlexWhite
Поставил, не помогло
А если так
static_cast<double>(j.m_value.number_float) <= static_cast<double>((std::numeric_limits<float>::max)()) ?

* добавились скобки
источник

VD

Vlad Doc in pro.cxx
AlexWhite
Поставил, не помогло
#define NOMINMAX до всех хедеров
источник

VD

Vlad Doc in pro.cxx
(опять вендо проблемы)
источник

AP

Antony Polukhin in pro.cxx
Я за скобки и PR в апстрим на их добавление :)
источник

A

AlexWhite in pro.cxx
А разве там с завода не должно все работать без доработок ?
источник

A

AlexWhite in pro.cxx
с гитхаба копирнул полностью файл
источник

NP

Nikita Provotorov in pro.cxx
Antony Polukhin
А если так
static_cast<double>(j.m_value.number_float) <= static_cast<double>((std::numeric_limits<float>::max)()) ?

* добавились скобки
Ох как же жизненно постоянно фиксить std::max
источник

AP

Antony Polukhin in pro.cxx
А что за библиотека? Возможно что автор не тестируется на MSVC с подключением дурных платформных файлов
источник