简体   繁体   中英

Using decltype in a nested-name-specifier

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM