[過去ログ] C++相談室 part164 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
260
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)10:05 ID:IIzrqfbq0(1/5) AAS
状況を簡略化するとこう。

namespace ns {
struct foo {};
template <class T>
void bar(const T&) {
T() + T();
} };

ns::foo operator+(const ns::foo& x, const ns::foo& y) { return ns::foo(); }

int main() { bar(ns::foo()); }

ADL は「通常の探索に加えて」関連する名前空間も探索対象にするルールなのでグローバル名前空間も探索対象になるが、通常の探索では後ろで宣言 (定義) されているものは見つけることができない。 この場合はエラーとして検出されるけど、可視な宣言と実際の定義の集合に食い違いは未定義という解釈でいいと思う。 (ちょっと自信はない……。)
省12
262: はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)11:41 ID:IIzrqfbq0(2/5) AAS
>>261
前者はたぶん未定義かつ診断不要な状況なのでエラーを検出せずに通すのも正しい挙動で
プログラマがそういう状況を作ってしまうのが仕様に反する (というか結果が保証されない) という解釈になると思う。
266
(2): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:21 ID:IIzrqfbq0(3/5) AAS
>>264
渡されたコールバック関数の引数の数によって区別するってこと?
素朴な方法だとオーバーロードするのが手っ取り早いと思う。

void func(void (*cb)(int)) {
cb(1);
}

void func(void (*cb)(int, int)) {
cb(1, 2);
}

void f1(int) {}
省5
271
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:43 ID:IIzrqfbq0(4/5) AAS
>>270
消えるよ。
275
(1): はちみつ餃子◆8X2XSCHEME (ワッチョイ 0d3e-C6j3) 2023/06/20(火)22:59 ID:IIzrqfbq0(5/5) AAS
>>272 >>274
ひとつの関数テンプレート中でやりたいってこと?
if constexpr が導入される前だとオーバーロードなり特殊化なりで
別の関数として分離しないと書けないと思う。

is_invocable に相当するものは自分で書こうと思えば書けるが
if constexpr は言語のコアの機能だからどうにもならんし……。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.038s