Wpis z mikrobloga

@lionbest: No dobra fakt ta implementacja size też jest do niczego, powino być użyte enable_if.

template
std::enable_if_t<

    std::is_member_function_pointer_v< decltype(&T::size) >,
    std::size_t >
size(const T &x) { return x.size(); }
@b33zon: Właśnie ten artykuł pokazuje że jest i dużo złego.
Do standardu zostało dodane std::size, które robi dokładnie to samo co ichniejsza implementacjia.
Powinno być użyte using std:: w każdym lokalnym skopie, który używa funkcji z std:: albo lokalnej przez ADL.
Tutaj oczywiście gdyby by było using myUtils::size; wszystko by się skompilowało. Nawet jak by typ miał własna metodę size we własnym scopie.
Najprostrze rozwiązane, to skoro implentacja robi to
@lionbest: Ale w artykule jest wyszczególnione, że usunięcie using namespace nie poprawiło sytuacji, przez argument-depend lookup

Unfortunately, this doesn’t help. We’re getting something we don’t expect out of namespace std, but it’s not because we usinged the namespace. It’s because of argument-dependent lookup (ADL). We made an unqualified call to size, where one of the arguments was a std::vector.
Właśnie to jest ciekawe: bez dwóch zdań w żadnym nagłówku nie powinniśmy używać using namespace, ale sam konflikt nazw w połączeniu z ADL powoduje problemy. Miejsce w newsach zasłużone :)