ho seguito la funzione (solo per riprodurre il problema):Template argomento detrazione per 'char *'
template <typename KeyT>
void func(const KeyT cptr) {
std::cout << typeid(KeyT).name() << std::endl;
}
Vorrei chiamare questo con una stringa letterale, come di seguito:
func<char*>("literal");
Ma, mi finisce per ottenere sotto avvertimento:
warning: ISO C++11 does not allow conversion from string literal to 'char *' [-Wc++11-compat-deprecated-writable-strings]
ho un bisogno specifico da utilizzare char*
come il mio tipo chiave ed ero ex pecting TAD
prendere in considerazione il param type
come const char*
nel suo complesso come non sto prendendo per riferimento.
L'avviso viene fornito con entrambi i compilatori clang
e g++
.
Come viene dedotto il param type
qui?
Grazie in anticipo.
'cptr' finisce per essere un puntatore-a-carattere const (' char * const'), non un puntatore a const char. – melpomene
@melpomene Come è finita così? – Arunmu
La vostra dichiarazione dice 'cptr' deve essere' const', e istanziate 'KeyT' con' char * '. Quindi 'cptr' è una const KeyT (con KeyT = pointer-to-char). – melpomene