Причиной возникновения этой ошибки является то, что вы пишете const
перед типом.Хотя это обычная практика, она не способствует пониманию того, как работают const / volatile-qualifiers (cv-qualifier).
В этом случае const T
, когда T
равно char*
, не означает const char*
.Это скорее означает char* const
, потому что T
равно char*
и независимо от того, какую сторону T
вы поставите const
, оно ведет себя так, как если бы const
находилось справа от T
, то есть сам указательэто также будет const, а не тип, на который указывают.
Этот тип путаницы легко избежать, если вы сделаете правилом всегда ставить const
или volatile
справа от типа.Например, это упрощает умственное расширение T const
, когда T
равно char*
до char* const
.
Это причина, по которой в источниках буста вы видите cv-квалификаторы после типа, а не до.