On Fri, May 18, 2012 at 4:56 AM, Chung-Lin Tang <clt...@codesourcery.com> wrote:
> On 2012/5/18 03:26 PM, Gabriel Dos Reis wrote:
>> On Fri, May 18, 2012 at 12:48 AM, Chung-Lin Tang
>> <clt...@codesourcery.com> wrote:
>>
>>> The point here is that, a group of changes that broke C bootstrap went
>>> in undetected for several days, because of the partially C++ default. To
>>> prevent that in the future, we should enforce similar checking in both C
>>> and C++.
>>
>> As opposed to enforcing checking that makes sense in a C++ setting?
>
> I think that, with the current status quo, it would be best to maintain
> things valid in both languages.

But that does not make much sense.

>
> But really, can you give more specific examples of "functions
> used in certain contexts [required to] have external linkage"?

struct Apply<void (*fun)() {
    // ...
};

// f is use only in this translation unit ...
void f() { // ..
}

do something with X<f>

> Because I
> don't think that in general, allowing global functions without
> declarations in headers is recommended C++ style either :)

That would only suggest a large practice of C and a limited
practice of C++.  Even our own implementation of does not
follow that practice.  It is not even idiomatic modern C++ to
require that.  It is an example of something that makes
sense in C (because

>
> Maybe what should be fixed is for -Wmissing-declarations to determine
> between your mentioned cases of external linkage, and the "usual" case
> (if it's not already capable of that).

This is a rabbit hole.  Your have determine
that something is useful in C, and now want at all cost
get into C++ without looking at idiomatic modern C++ and
see whether it makes much sense there.

>
> Chung-Lin

Reply via email to