samedi 25 avril 2015

Confusion about compile-time pointer values


C++ has compile-time pointer values. This is true, otherwise, non-type template parameters and constexpr won't work with pointers. However, as far as I know, addresses of functions and objects of static storage are known (at least) at link-time rather than compile-time. Following is an illustration:

main.cpp

#include <iostream>

template <int* p>
void f() { std::cout << p << '\n'; }

extern int a;

int main() {
    f<&a>();
}

a.cpp

int a = 0;

I'm just wondering how the address of a could possibly be known when compiling main.cpp. I hope somebody could explain this a little to me.

PLUS: This mechanism seems to be rather robust. Even when I enabled Randomized Base Address, the correct output is obtained.


Aucun commentaire:

Enregistrer un commentaire