@ProCxx

Страница 931 из 2477
Constantine
02.06.2017
17:21:00
я правильно понимаю, что constexpr выражения по сути вычисляются после генерации всех типов и шаблонных подстановок, поэтому в принципе не может быть способа перевода constexpr выражения в шаблонный параметр?

Александр
02.06.2017
17:22:54
почему? constexpr size_t size = std::is_same<int, long>::value * 5 + 3; std::array<int, size> a;

Constantine
02.06.2017
17:23:41
хм...

Александр
02.06.2017
17:23:41
вот аргумент constexpr функции не вытащить, ибо он может быть не constexpr

Google
Constantine
02.06.2017
17:24:54
зачем так делать?

почему нет strict constexpr сигнатуры функции

Александр
02.06.2017
17:26:21
вообще был пропозал сделать оператор constexpr(), который возвращал бы true, если текущий блок во время компиляции вычисляется

Constantine
02.06.2017
17:27:21
я бы сделал proposal что можно параметр constexpr функции помечать constexpr

Александр
02.06.2017
17:27:25
if constexpr (constexpr()) { // а вот тут аргументы constexpr функции уже constexpr }

хорошая мысль кстати

ибо иногда часть аргументов может быть известна в compile-time

Constantine
02.06.2017
17:27:52
и разрешить перегрузку

о, спасибо, действительно так не надо делать

я вспомнил аргументы против :)

Хотя явная пометка constexpr не создает никаких проблем, кажется. Там проблема была, что если хочется часть аргументов получать constexpr и учитывать это при оптимизации, оптимизатор должен сгенерировать несколько версий функции, как будто она шаблонная

В случае указания параметров функции как constexpr компилятор может интерпретировать это как функцию, у которой параметры, помеченные constexpr, шаблонные

Google
Александр
02.06.2017
17:35:22
и соответствующие ограничения накладывать?

Constantine
02.06.2017
17:37:18
интерпретировать в точности как сахар для шаблонного параметра с подстановкой фактических значений

Александр
02.06.2017
17:40:00
и что плохого?

Constantine
02.06.2017
17:42:25
а, это не работает, потому что шаблонный параметр не может быть значением user-defined type

*wall*

Antony
02.06.2017
17:45:23
я бы сделал proposal что можно параметр constexpr функции помечать constexpr
Есть множество предложений на эту и похожие темы. В международном комитете их постоянно обсуждают, к единому мнению пока не пришли: нужно сделать приятный/читаемый синтаксис, не все компиляторы до сих пор умеют хорошо constexpr, есть непонятки как смешивать constexpr и не constexpr аргументы + надо сделать так, чтобы пользователь не писал две функции (одну с constexpr параметром, другую - без)

Constantine
02.06.2017
17:47:20
т.е. разрешить фактически перегрузку функции по некоторым конкретным значениям переданных constexpr параметров

Antony
02.06.2017
17:50:35
Есть что-то наподобие if (constexpr()) и при этом constexpr() - хитрая штука, которая возвращает не compile time констунту. Там много проблем возникает с ODR если делать иначе. В общем - пока рано обсуждать, разработчики компиляторов ещё не до конца определились как это должно выглядеть и как ничего не поломать таким кодом

▄︻̷ ┻ ═━一™
02.06.2017
17:55:54
..

Constantine
02.06.2017
18:05:25
Собственно, я могу описать задачу, с которой у меня это возникало using some_interface_uptr = std::unique_ptr<some_interface>; enum class align_h { none, left, center, right }; enum class align_v { none, top, middle, bottom }; //1 some_interface_uptr make_aligner_1(some_interface_uptr, align_h h, align_v v); //2 template <align_h h, align_v v> some_interface_uptr make_aligner_2(some_interface_uptr) {...} //redirect template <> some_interface_uptr make_aligner_2<align_h::none, align_v::none>(some_interface_uptr) {...} //you're doing it wrong, but I will let you и аналогичные конструкции в итоге встречаются достаточно часто, собственно. Вся функция в принципе не может быть constexpr. И хотя в этом случае компилятор еще кое-как можно сделать тупо произведение всех конфигураций, вроде оптимизация конструкций типа явное создание вектора с нулем элементов выглядит чрезвычайно целесообразной.

Constantine
02.06.2017
18:19:20
Fmt?
с тех пор прошло много времени, и у меня есть некоторая тонна инфы, в частности, что такой синтаксис по сути невозможен

Berkus
02.06.2017
18:35:10
Ок

Используй cout-style для тайпчекинга

Alexander
02.06.2017
23:06:11
Новая работа во славу опен сорса подьехала : кто хочет пописать лабу для опенсорса с алгоритмами image processing, на основе opencv? Либа будет содержать в себе более эффективные алгоритмы бинаризации, алгоритмы автокропа, устранения размытия и так далее. Кто заинтересован - стучите мне. Это не в буст, это просто либа, которую поле будем встраивать в различные OCR программы (gImageReader, например).

V
03.06.2017
06:53:53
Как таймер написать?

Antony
03.06.2017
07:01:00
Хороший асинхронный (и снхронный) таймер - Boost.Asio

Alexander
03.06.2017
07:28:46
Завтра начнётся ревью тимсорта в буст

Google
Berkus
03.06.2017
07:39:17
Как таймер написать?
Можешь у меня подглядеть

https://github.com/berkus/libuia/blob/master/include/uia/timer.h и timer_engine.h

Evgeniy
03.06.2017
08:21:21
Pointer Overflow Checking is in LLVM https://blog.regehr.org/archives/1518

Aidar
03.06.2017
09:06:59
почему нет strict constexpr сигнатуры функции
Я уже бомбил тут на эту тему

Литеральные типы*

Но мне сказали что это уже D какой-то получается

Alexander
03.06.2017
12:24:32
Так точно!)

Constantine
03.06.2017
12:26:18
Вообще у меня тоже есть потребность во славу опенсорса :) Хочу инвертер jpeg-искажений скриншотов

Я сам там ниасилил, какую метрику надо впихать для поиска деквантованных коэффициентов DCT

Pepe
03.06.2017
13:23:17
Кто нибудь знает как в MPIR передать значение числу в виде 10^1000? Если вообще такое возможно

Pepe
03.06.2017
13:30:05
mpz_pow?
Такого в доках нет

Щас посмотрю в интернете

Щас посмотрю в интернете
Это же power видимо

Admin
ERROR: S client not available

Pepe
03.06.2017
13:31:29
То есть надо инициализировать ещё две переменные и посчитать результат

Pepe
03.06.2017
13:34:42
ну степень это просто число
Наверно так сделаю. Просто там есть способ строкой char ввести число я думал что может можно его просто ввести руками

Google
Pepe
03.06.2017
13:48:13
1e1000
Вот так и хочу. Я вообще там не заметил что нужно объявить перед инициализацией. Перед assignment.

Владислав
03.06.2017
13:56:21
всем привет в этом чате

Pepe
03.06.2017
14:09:07
ну scanf такой формат поддерживает вроде
Насколько я понял там все сложно. Аргумент для присваивания должен быть типа mpz_t или double или char. То есть просто записать не получится, double слишком маленький, а mpz_t я никак не могу присвоить значение если нет другой mpz_t

Constantine
03.06.2017
14:30:04
1е1000 это не точное число

Evgeniy
03.06.2017
14:42:36
Constantine
03.06.2017
14:42:52
почему это?
потому что как дабл не может быть представлен точно

Friedrich
03.06.2017
14:43:08
Этот дабл вполне точно представляется как Infinity :)

Constantine
03.06.2017
14:43:35
Этот дабл вполне точно представляется как Infinity :)
в 80битном вроде 3172 ограничение порядка, нет?

Friedrich
03.06.2017
14:43:51
Ну, я говорил про 64-битный.

Constantine
03.06.2017
14:44:06
в 64-битный не полезет, да

Friedrich
03.06.2017
14:44:26
80-битный на всех платформах, которые я знаю, будет называться long double, если вообще там будет :)

Constantine
03.06.2017
14:45:21
при этом на практике компилятор может выполнять оптимизацию и все вычислить в 80битке, ничего не гарантируется

даже если операция с double

Friedrich
03.06.2017
14:46:15
Мне тоже почему-то припоминается, что у MS вообще нет 80-битного типа. Ну а в gcc / clang он есть (по крайней мере на Интеловской архитектуре).

Stanislav
03.06.2017
14:50:45
Мне тоже почему-то припоминается, что у MS вообще нет 80-битного типа. Ну а в gcc / clang он есть (по крайней мере на Интеловской архитектуре).
The major reason is that FP code generation has been switching to the use of SSE/SSE2/SSE3 instruction sets instead of the x87 FP stack since that is what both the AMD and Intel recent and future chip generations are focusing their performance efforts on. These instruction sets only support 32 and 64 bit FP formats.

Google
Stanislav
03.06.2017
14:51:00
типа причина

Constantine
03.06.2017
14:52:19
угу, найсыч причина. Помню, что у моего начальника был ноут без поддержки SSE2 году в 2010, примерно

Страница 931 из 2477