デフォルトの引数がADLをトリガーすることを期待して、次のコードを半分書きました。そうではありません(代わりにコンパイラエラーが発生しました)。
ADLをトリガーするには明示的な引数が必要ですか?
#include <iostream>
namespace sheldon
{
enum FLAG{ USA , UK , EU };
void fun( FLAG f = USA )
{
std::cout << "Fun with flags!" << std::endl;
}
}
int main()
{
fun(); // Does not compile
// fun( sheldon::USA ); // compiles
}
ADLは、指定した引数でのみ機能します。そうしないと、事態は非常にひどくなり、名前空間はその内容を分離するのに役に立たなくなります。
これもあったらどうなるか考えてみてください。
namespace fun {
struct tag {};
void fun(tag = {})
{
std::cout << "Fun with tags!" << std::endl;
}
}
旗やタグを楽しんでみませんか?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加