
Aidar
20.06.2017
13:33:47
в любом случае нужно забить

Constantine
20.06.2017
13:34:07
мне вот говорят, что это ill-formed

Aidar
20.06.2017
13:34:16
кто конкретно
[](){} объект - функтор неизвестного типа

Google

Aidar
20.06.2017
13:34:35
все

Constantine
20.06.2017
13:34:36
ну наличие ODR violation делает программу ill-formed

Aidar
20.06.2017
13:34:51
скомпиль другим компилятором

Constantine
20.06.2017
13:34:56
или обращения к классу, забыл
или ты про пример

Anatoly
20.06.2017
13:35:28
почему?
почему это бага анализатора? хз, поскольку здесь нет нарушения ODR

Aidar
20.06.2017
13:35:45

Constantine
20.06.2017
13:44:39

Anatoly
20.06.2017
13:46:01
я такого пункта найти не могу
может Антон поможет

Constantine
20.06.2017
13:46:39

Google

Aidar
20.06.2017
13:46:47
@antoshkka

Constantine
20.06.2017
13:46:50
и у меня нет ни малейшей идеи, как это гуглить

Anatoly
20.06.2017
13:47:15
да здесь не гуглить, здесь штудировать стандарт надо


Alexander
20.06.2017
13:51:17
Завтра начинается МИНИ ревью новой сортировки в Boost.Sort : pdqsort
The (mini) review for pdqsort will start tomorrow 6/21, and run through
6/30. I will manage the review; Orson Peters is the author.
The proposed boost source is here:
https://gist.github.com/orlp/24f27aada1ed724d1809b372c33eb92e
Documentation is here: https://github.com/orlp/pdqsort#pdqsort
And a draft paper is here:
https://drive.google.com/open?id=0B1-vl-dPgKm_T0Fxeno1a0lGT0E
If you're interested, please answer these questions:
1. Are there any specific concerns you have about pdqsort vs. std::sort?
2. Does it compile for you when you try to use it as a replacement for
std::sort?
3. How does the performance compare on your system vs. std::sort?
4. Do you think we should include pdqsort in Boost.Sort?
5. Do you have any concerns about switching the default/fallback sort in
Boost libraries (including Boost.Sort) from std::sort to pdqsort?
кто хочет помочь, что сделайте ревью, плиз и зашлите результат в boost mailing list


Anatoly
20.06.2017
14:00:07

Mikhail
20.06.2017
14:31:12
А что у нас, cmake не умеет precompiled headers?
не могу найти как выставить

Дед Пегас
20.06.2017
14:31:41
Через жопу умеет.
Оно ж копилезависимое.

Mikhail
20.06.2017
14:32:59
мда

Дед Пегас
20.06.2017
14:33:02
Советую опробовать вот это: https://github.com/sakra/cotire
Оно там обмазано и включеня все эти PH.

Mikhail
20.06.2017
14:36:25
ну что сказать, я удивлен конечно

Anatoly
20.06.2017
14:37:44
А что у нас, cmake не умеет precompiled headers?
stdafx.cpp должен быть помечен как создающий pch
set_source_files_properties(stdafx.cpp
PROPERTIES
COMPILE_FLAGS "/Yc\"${THIS_LIB_PCH}\""
)
а все исходные файлы, что используют pch должны его включить
set_source_files_properties(${source}
PROPERTIES
COMPILE_FLAGS "/Yu\"${THIS_LIB_PCH}\""
)
вместо ${THIS_LIB_PCH} имя твоего проекта

Mikhail
20.06.2017
14:38:46
Да, спасибо
выглядит как костыль конечно и нужно будет переделывать cmake проект
так что пока забью :)

Google

Anatoly
20.06.2017
14:39:30
чтобы не страдать, мы написали свою макро обвязку
rolis_library( smartcard
COMPILE_FLAGS
-D_AFXDLL
-D_MBCS
-DROLIS_SMARTCARD_EXPORTS
SOURCES
${rolis_SOURCE_DIR}/rolis/SmartCard.h
SmartCard.cpp
StdAfx.h
PCH StdAfx.h PCH_SOURCE StdAfx.cpp
DEPENDS
subclass
LINK_LIBS
winscard
rpcrt4
MFC
)
ну а уже в макросе обрабатываем как нам требуется PCH

Mikhail
20.06.2017
14:41:15
Т.е. вы создали PCH команду?
и PCH_SOURCE

Anatoly
20.06.2017
14:42:03
нет, написали макрос который внутри делает всю грязную работу
теже set_source_files_properties только внутри макроса

Дед Пегас
20.06.2017
14:43:18
А можно взять cotire)

Anatoly
20.06.2017
14:44:44
наверняка cotire это делает лучше, поскольку поддерживает все современные компиляторы

Дед Пегас
20.06.2017
14:45:07
Да, потому и советую.

Anatoly
20.06.2017
14:45:59
я хотел лишь показать, что ничего под катом волшебного нет

Дед Пегас
20.06.2017
14:46:19
Справедливо!

Constantine
20.06.2017
14:47:55
Нарушает ли лямбда, объявленная в inline шаблонной функции и замыкающая ее параметры, правило ODR?
template <typename T> inline std::function<void()> f(T* object) { return [object](){}; }

Aidar
20.06.2017
14:52:24
да как лямбда может нарушать ODR?
у каждой отдельно взятой лямбды свой тип

Berkus
20.06.2017
14:54:03

Constantine
20.06.2017
14:54:21
A type defined within the body of an extern inline function is the same type in every translation unit.

Berkus
20.06.2017
14:54:29

Google

Aidar
20.06.2017
14:54:38
ну значит он один
(у тебя там шаблон, если ты об этом, для каждого инстанса шаблона будет свой тип лямбды)

Berkus
20.06.2017
14:56:05

Mikhail
20.06.2017
14:56:33

Berkus
20.06.2017
14:57:01

Constantine
20.06.2017
15:00:55

Anatoly
20.06.2017
15:05:58
конечно, да
хотя, не понятно откуда вопрос. [](){} - это лямбда выражение, как если бы ты написал 1+1
что здесь definition?

Admin
ERROR: S client not available

Constantine
20.06.2017
15:09:17
это лямбда-выражение является объектом некоторого типа

Anatoly
20.06.2017
15:10:27
и?
1+1 тоже выражение некоторого типа

Constantine
20.06.2017
15:10:57
An inline function shall be defined in every translation unit in which it is odr-used and shall have exactly the same definition in every case

Aidar
20.06.2017
15:10:58
и?
ну тут на самом деле есть дефинишн
у тебя блин шаблон

Anatoly
20.06.2017
15:11:23

Aidar
20.06.2017
15:11:34
втопку инлайн

Constantine
20.06.2017
15:13:17
почему бы компилятору не генерировать лямбду независимо от шаблонных параметров содержащих её функцию?

Aidar
20.06.2017
15:13:40

Google

Anatoly
20.06.2017
15:13:42
по определению инстанцирования шаблона

Aidar
20.06.2017
15:13:48
это не функция
это шаблон функции

Constantine
20.06.2017
15:14:37
хорошо, при инстанцировании шаблона почему бы компилятору не сгенерировать имя типа для лямбды как lambda_generatedN
после чего не заявить, что в разных модулях компиляции это имя генерируется по-разному
поэтому реализация функции нарушает правило ODR

Anatoly
20.06.2017
15:15:42
потому что тело инстанцированного шаблона фукнции гарантирует уникальность определенных в нем типов, если бы они были

Constantine
20.06.2017
15:16:35
уникальности недостаточно

Anatoly
20.06.2017
15:16:46
все что справедливо для класса/функции, будет справедливо и для инстанцированных шаблонов класса/функции

Constantine
20.06.2017
15:16:49
нужно еще единообразие между модулями компиляции

Berkus
20.06.2017
15:17:03
модули компиляции вообще могут каждый со своими флагами собираться

Constantine
20.06.2017
15:17:28
потому что в противном случае заданная шаблонная функция ill-formed, поскольку в разных модулях компиляции будет сгенерирована разная ее реализация

Berkus
20.06.2017
15:17:46
это будут разные шаблонные функции

Anatoly
20.06.2017
15:18:20
но нет, они везде одни и теже
поэтому ODR не нарушается

Constantine
20.06.2017
15:18:46
и я тут перепроверил, компилятор MSC 14 уверен, что этот код нарушает ODR

Igor
20.06.2017
15:18:51

Berkus
20.06.2017
15:19:25

Anatoly
20.06.2017
15:19:41

Berkus
20.06.2017
15:19:53