मैं सी ++ में कुछ ओवरलोड किए गए जीसीसी निर्मित-इन्स को अनुकरण करने का एक तरीका ढूंढ रहा हूं। बनाया-इन इन के समान हैं:फ़ंक्शन जो केवल शाब्दिक पूर्णांक लेता है
__builtin_foo(char *a, signed int b);
__builtin_foo(short *a, signed int b);
__builtin_foo(long *a, signed int b);
एक विशेष सीमा कठिन जीसीसी में कोडित साथ
: b
एक शाब्दिक मान होना चाहिए, यानी आप कॉल कर सकते हैं:
__builtin_foo((char *)0, 1);
लेकिन नहीं:
extern int val;
__builtin_foo((char *)0, val);
जो एक संकलक त्रुटि उत्पन्न करता है। मैंने इसे अनुकरण करने के लिए std::enable_if
के साथ झुका दिया है लेकिन यह लागू करने का कोई तरीका नहीं मिल सकता है कि केवल शाब्दिक तर्क स्वीकार किए जाते हैं। क्या इसे करने का कोई तरीका है?
#define ASSERT_LITERAL (एक्स) (शून्य) (x ## 98765L) - का कारण बनता है एक संकलन किसी भी गैर पूर्णांक के लिए त्रुटि शाब्दिक उदा ASSERT_LITERAL (x); असफल ASSERT_LITERAL (1); - उत्तीर्ण करना। उत्तर के रूप में जोड़ने के लिए बहुत हैकी – samgak
@ सैमगाक: यह काम करने के लिए भी हैकी है। 'ASSERT_LITERAL (0) 'भी असफल हो जाएगा। –
@ माइकसेमोर: मामूली विस्तार; 'x ## 010L' ठीक करता है। लेकिन मुझे 'ASSERT_LITERAL (0.0) ' – MSalters