std::get
явно не для SFINAE, как указано в [tuple.elem]:
template
constexpr T& get(tuple & t) noexcept; // and the other like overloads Требуется: Тип
T
встречается ровно один раз вTypes...
. В противном случае, программа является плохо сформированной.
std::get
также явно не SFINAE.
Что касается других вопросов:
Есть ли причина для
std::get
не быть SFINAE-дружественными?
Не знаю. Как правило, это не тот вопрос, который нужно обсуждать. Так что я думаю, это не считалось чем-то, что нужно было сделать. Сложные ошибки намного легче понять, чем пролистывать кучу нежизнеспособных вариантов кандидатов. Если вы считаете, что есть веская причина для того, чтобы std::get
был дружественным по отношению к SFINAE, вы можете отправить об этом вопрос LWG.
Есть ли лучший обходной путь, чем описанный выше?
Конечно. Вы можете написать свою собственную дружественную SFINAE версию get
(обратите внимание, она использует C ++ 17 сложенное выражение ):
template ::value + ...) == 1, int> = 0>
constexpr T& my_get(tuple& t) noexcept {
return std::get(t);
}
И затем делать это по своему желанию ,
Почему бы вам просто не указать в привязке в качестве режима безопасности "встроенная безопасность Windows"? Это значение по умолчанию для привязок net.Tcp и wsHttp - учетные данные Windows текущего пользователя, вошедшего в систему, будут отправлены по сети на сервер.
На самом деле нет необходимости явно устанавливать эти учетные данные.