g++ treats returned string literal as const char pointer not const char array

前端 未结 2 719
别那么骄傲
别那么骄傲 2020-12-09 18:52

I\'m seeing some odd behaviour when returning a string literal from a function that should perform an implicit conversion with g++ (version 4.7.3). Can anyone explain why t

相关标签:
2条回答
  • 2020-12-09 19:01

    If you want a reusable C++03 workaround (i.e. one in which you won't have to care about what the return type is, as long it is constructible from a char array), you will have to use some kind of a char array wrapper.

    template <size_t N>
    struct char_array_ref
    {
        typedef const char (&ref_type)[N];
        ref_type ref;
    
        template <typename T>
        operator T() const
        {
            return T(ref);
        }
    };
    
    template <size_t N>
    char_array_ref<N> stupid_gxx_use_array_reference(const char (&chars)[N])
    {
        return char_array_ref<N> { chars };
    }
    
    
    Test fn()
    {
      return stupid_gxx_use_array_reference("foo");
    }
    

    Should be easy to regex propagate this across your codebase, too.

    Obviously, in your code you can change stupid_gxx_use_array_reference into something less verbose.

    0 讨论(0)
  • 2020-12-09 19:03

    It appears that this is a bug affecting several versions of gcc which has been reported over and over again, most recently about a month ago against the most recent version, 4.8.2. See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24666

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