template <int * ip> struct test {};
struct q {
static int a;
int b;
constexpr q(int b_) : b(b_) {}
};
int i;
constexpr q q0(2);
int main()
{
constexpr test<&i> t1; // Works fine
constexpr test<&q::a> t2; // Works
constexpr test<&q0.b> t3; // Does not work; address of non-static member?
return 0;
}
संकलन समय के दौरान ज्ञात टेम्पलेट तर्क &q0.b
के बावजूद कोड के उपरोक्त टुकड़े में टी 3 की घोषणा विफल हो जाती है। कुछ Googling है कि इस मानक द्वारा अनुमत नहीं है पता चला (खंड 14.3.2):गैर स्थैतिक सदस्य का पता क्यों टेम्पलेट गैर-प्रकार पैरामीटर के रूप में अनुमति नहीं है?
[Note: Addresses of array elements and names or addresses of non-static class members are not acceptable template-arguments.
X<&s.m> x4; // error: address of non-static membe
तो क्यों वास्तव में यह स्पष्ट रूप से मानक से वैश्विक चर अद्वितीय होने का गैर स्थिर सदस्यों के पते के बावजूद के साथ-साथ की अनुमति नहीं है संकलन समय के दौरान जाना जाता है?
मैंने जीसीसी 5.1.1 और clang 3.5.0 के साथ -std = C++ 11 – nav
कोई '(नया क्यू) -> बी' संकलन समय –
पर ज्ञात नहीं है यह प्रकार' int * ' , यह 'int q :: *' है, है ना? – skypjack