看來std :: remove_const無法刪除const char*
的常量。請看下面的代碼:這個程序的如何從'char const *'中刪除const
#include <iostream>
#include <type_traits>
#include <typeinfo>
template< typename T >
struct S
{
static void foo() {
std::cout << typeid(T).name() << std::endl;
std::cout << typeid(std::remove_const<T>::type).name() << std::endl;
}
};
int main()
{
S<char const*>::foo();
}
輸出(在Visual Studio 2010中):
char const *
char const *
並且可能在GCC我們有可讀的輸出(代碼here):
PKc
PKc
我希望在Microsoft編譯器的第二行獲得char *
,以及gcc上的任何(但不同於第一行)。我究竟做錯了什麼?如何將char const*
變成char*
?
'字符常量*'是一個指向const的指針,它不是const本身。 – Pubby
你發佈的代碼甚至不會在沒有'typename std :: remove_const ...'的gcc上編譯......' – Praetorian
是的,我必須爲gcc編譯器添加typename。 gcc的代碼在這裏:http://ideone.com/Vd25T8 – Uri