मैं अस्थिर प्रकारों पर एक विशिष्ट संचालन को अस्वीकार करने की कोशिश कर रहा हूं। इसे पूरा करने के लिए मैं std::is_volatile
का उपयोग करने की कोशिश कर रहा हूं, लेकिन नीचे दिया गया कोड त्रुटियों के बिना संकलित है, जो मैं नहीं चाहता हूं।std :: is_volatile का उपयोग कैसे करें?
is_volatile::value
झूठी नीचे दिए गए मामले में क्यों है?
#include <type_traits>
template<typename T>
inline void DoStuff(T val) {
static_assert(!std::is_volatile<T>::value, "No volatile types plz");
//...
}
int main() {
volatile char sometext[261];
DoStuff(sometext);
}
यह है कि टेम्पलेट तर्क कटौती कैसे काम करता है - क्वालीफायर मूल्य-मूल्य पैरामीटर प्रकारों का हिस्सा नहीं हैं। यह अनिवार्य रूप से वही है: 'अस्थिर int src = ...; int n = src; '। ध्यान दें कि 'src' की योग्यता के बारे में कुछ भी नहीं जानता है। दूसरे शब्दों में, lvalue-to-rvalue रूपांतरण क्वालीफायर को छोड़ देता है। –
@KerrekSB शायद आपने अनदेखा किया है कि एक सरणी को तर्क –
@ एमएम: नहीं दिया गया है, जो केवल विवरणों को जटिल करता है, लेकिन मूल मुद्दा बनी हुई है। –