Consider the following demonstrative program.
#include <iostream>
namespace N
{
struct A
{
static int n;
};
A A;
}
int N::A::n = 10;
int main()
{
std::cout << N::A::n << '\n';
std::cout << N::decltype( N::A )::n << '\n';
return 0;
}
The program compiles successfully using gcc 8.3 at for example www.ideone.com .
However if to run this program using MS VS 2019 then the compiler issues an error relative to the record decltype( N::A )
in the nested-name-specifier. If to remove preceding name N::
then the program compiles successfully.
Is it a bug of the MS VS compiler or is the nested-name-specifier written incorrectly?
A decltype-specifier can never appear except at the beginning of a nested-name-specifier . After all, it designates a specific type, and no name lookup is necessary afterwards to interpret it. GCC is wrong to accept the code: by experimentation, it seems to just ignore any preceding components after checking that they exist.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.