Спецификатор глобальной области не работает в c ++ [duplicate]

Рассмотрим функцию bar, объявленную в пространстве имен foo, которая возвращает std::vector< float > (но также работает с другими объектами).

// header.h
#include <vector>

namespace foo
{
        ::std::vector< float > bar();
}

Компиляция его определения с использованием относительного пространства имен работает.

#include "header.h"

::std::vector< float > foo::bar()
{
}

Однако компиляция его определения с использованием абсолютного пространства имен не работает.

#include "header.h"

::std::vector< float > ::foo::bar()
{
}

Ошибка возврата из GCC равна

function.cpp:3:26: error: ‘foo’ in ‘class std::vector<float>’ does not name a type
::std::vector< float > ::foo::bar()

Получается что пробелы допускаются в пространстве имен, поэтому ::std::vector< float > ::foo::bar() эквивалентно ::std::vector< float >::foo::bar(). Как использовать абсолютное пространство имен в определении функции, когда тип возвращаемого объекта является объектом?

2
задан 19 July 2018 в 19:14

1 ответ

Один из способов решения проблемы - использовать возвращаемый тип возврата.

auto ::foo::bar() -> ::std::vector< float >
{
    ...
}
7
ответ дан 15 August 2018 в 16:18

Другие вопросы по тегам:

Похожие вопросы: