जैसा कि प्रतीत होता है, सी ++ प्रीप्रोसेसर विफल रहता है यदि एक तर्क के रूप में एक मैक्रो को एकाधिक तर्कों के साथ एक टेम्पलेट त्वरण पारित किया जाता है।सी ++ प्रीप्रोसेसर टेम्पलेट तर्कों से अवगत नहीं हैं?
नीचे एक उदाहरण देखें।
#include <stdio.h>
#define FOO(v) printf("%d\n",v::val())
template<int N>
struct bar {
static int val() { return N; }
};
template<int N, int M>
struct baz {
static int val() { return N+M; }
};
int main() {
printf("%d\n",bar<1>::val());
printf("%d\n",baz<1,2>::val());
FOO(bar<10>); // OK
FOO(baz<20,30>); // error: too many arguments provided to function-like macro invocation
FOO((baz<20,30>)); // error: '::val' has not been declared
}
साथ Tested बजना ++ और जी ++
यह एक बग के रूप में माना जाना चाहिए?
आप मैक्रो एक parenthesized तर्क के अंदर निकालने के लिए डिजाइन सकता है, लेकिन इस उदाहरण निश्चित रूप से एक मैक्रो जरूरत नहीं है। – chris
एक संबंधित प्रश्न: क्या सी ++ प्रीप्रोसेसर सी ++ के बारे में जानते हैं? AFCICT सी ++ प्रीप्रोसेसर में बहुत कुछ नहीं बदला है क्योंकि यह केवल सी प्रीप्रोसेसर था ...;) –
@ क्रिस, धन्यवाद, आपके संदेश से शब्द के साथ मुझे एक समान प्रश्न का उत्तर मिला http://stackoverflow.com/प्रश्न/13842468/कॉमा-इन-सीसी-मैक्रो/13842784 # 13842784 – hutorny