規格の意図がわからん
なぜグローバルのコンテキストでのprivate関数の名指しを、突然そこで許すんだ?

関係ないが返却値はauto->で統一すべきだと思う
宣言の対象となる識別子より左に長さが一定でないものがあるという
Cから続く悪しき伝統をせっかく改めたのだから黒歴史はさっさと忘れようや
同じ話でtypedefもusingで統一していいだろう