Se ho una variabile locale statica o una variabile locale thread_local che si trova all'interno di una funzione inline definita in diverse unità di traduzione, nel programma finale sono garantiti dallo standard che hanno lo stesso indirizzo?Variabili locali static/thread_local delle funzioni inline?
// TU1:
inline int* f() { static int x; return &x; }
extern int* a;
void sa() { a = f(); }
// TU2:
inline int* f() { static int x; return &x; }
extern int* b;
void sb() { b = f(); }
// TU3:
int *a, *b;
void sa();
void sb();
int main() { sa(); sb(); return a == b; }
Quanto sopra restituisce sempre 1?
Grazie, e suppongo che il caso 'thread_local' abbia una risposta simile? –
@AndrewTomazos: Sì, penso di sì, perché con [dcl.stc]/4, l'identificatore 'thread_local' implica l'identificatore' static', e la regola che ho citato nella risposta si applica allo * specificatore *, non all'archiviazione classe. –