3 ms·
The difference is subtle. Here is a (stupid) example: int chooseone(restrict int* a, restrict int* b, bool c) { if(c) return *a; else return *b;
by CJefferson 10y ago
The difference is subtle. Here is a (stupid) example:
int chooseone(restrict int* a, restrict int* b, bool c) {
if(c) return *a; else return *b;
}
Here, we can pass the same pointer for a and b, because only one of them is ever accessed in any call to the function.
- Someone 10y agoThanks. I reread http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf, and initially didn't get that from the informal description of restrict given there. It says (section 6.7.3): "An object that is accessed through a restrict-qualified pointer has a special association with that pointer. This association, defined in 6.7.3.1 below, requires that all accesses to that object use, directly or indirectly, the value of that particular pointer." So, it hinges on the meaning of 'accesses'; it is a runtime thing, not a compile-time thing.