(v) is actually (*&v) since when?

前端 未结 3 1907
臣服心动
臣服心动 2021-02-13 00:32

Could C++ standards gurus please enlighten me:

Since which C++ standard version has this statement failed because (v) seems to be equivalent to (*&

相关标签:
3条回答
  • 2021-02-13 00:48

    register is no longer a storage class specifier, you should remove it. Compilers may not be issuing the right error or warnings but your code should not have register to begin with

    The following is a quote from the standard informing people about what they should do with regards to register in their code (relevant part emphasized), you probably have an old version of that file

    C.1.6 Clause 10: declarations [diff.dcl]

    Change: In C++, register is not a storage class specifier.

    Rationale: The storage class specifier had no effect in C++. Effect on original feature: Deletion of semantically well-defined feature.

    Difficulty of converting: Syntactic transformation.

    How widely used: Common.

    0 讨论(0)
  • 2021-02-13 00:57

    If you look at the revision summary of the latest C++1z draft, you'd see this in [diff.cpp14.dcl.dcl]

    [dcl.stc]
    Change: Removal of register storage-class-specifier.
    Rationale: Enable repurposing of deprecated keyword in future revisions of this International Standard.
    Effect on original feature: A valid C++ 2014 declaration utilizing the register storage-class-specifier is ill-formed in this International Standard. The specifier can simply be removed to retain the original meaning.

    The warning may be due to that.

    0 讨论(0)
  • 2021-02-13 01:02

    Your worry is unwarranted since the file in question does not actually contain the register keyword:

    grep "register" /usr/include/linux/rtnetlink.h
    

    outputs nothing. Either way, you shouldn't be receiving the warning since:

    • System headers don't emit warnings by default, at least in GCC

    • It isn't wise to try to compile a file that belongs to a systems project like the linux kernel in C++ mode, as there may be subtle and nasty breaking changes

    Just include the file normally or link the C code to your C++ binary. Report a bug if you really are getting a warning that should normally be suppressed to your compiler vendor.

    0 讨论(0)
提交回复
热议问题