Tôi đang cố gắng không cho phép một hoạt động cụ thể trên các loại biến động. Để thực hiện điều này tôi đang cố gắng sử dụng std::is_volatile
, nhưng mã bên dưới được biên dịch mà không có lỗi, mà không phải là những gì tôi muốn.Làm thế nào để sử dụng std :: is_volatile?
Tại sao is_volatile::value
sai trong trường hợp dưới đây?
#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);
}
Đó chỉ là cách tính toán trích đối số mẫu - vòng loại không phải là một phần của các loại tham số giá trị được suy luận. Về cơ bản, nó giống như: 'volatile int src = ...; int n = src; '. Lưu ý cách 'n' không biết gì về trình độ của' src'. Nói cách khác, chuyển đổi lvalue-to-rvalue loại bỏ vòng loại. –
@KerrekSB có thể bạn bỏ qua rằng một mảng được đưa ra như là đối số –
@ M.M: Không, điều đó đơn thuần làm phức tạp các chi tiết một chút, nhưng vấn đề cốt lõi vẫn còn. –