错误:命名空间“std”中没有名为“remove_cv_t”的模板;你是说'remove_cv'吗?

Posted

技术标签:

【中文标题】错误:命名空间“std”中没有名为“remove_cv_t”的模板;你是说\'remove_cv\'吗?【英文标题】:error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?错误:命名空间“std”中没有名为“remove_cv_t”的模板;你是说'remove_cv'吗? 【发布时间】:2021-07-18 07:48:27 【问题描述】:

我的问题似乎类似于 this 问题,除了它发生在我在 rails 应用程序中运行 yarn install 时。

当我运行yarn install时,成功运行了一段时间,然后

../src/libsass/src/ast.hpp:1614:25: warning: loop variable 'numerator' of type 'const std::__1::basic_string<char>' creates a copy from type 'const std::__1::basic_string<char>' [-Wrange-loop-analysis]
        for (const auto numerator : numerators)
                        ^
../src/libsass/src/ast.hpp:1614:14: note: use reference type 'const std::__1::basic_string<char> &' to prevent copying
        for (const auto numerator : numerators)
             ^~~~~~~~~~~~~~~~~~~~~~
                        &
../src/libsass/src/ast.hpp:1616:25: warning: loop variable 'denominator' of type 'const std::__1::basic_string<char>' creates a copy from type 'const std::__1::basic_string<char>' [-Wrange-loop-analysis]
        for (const auto denominator : denominators)
                        ^
../src/libsass/src/ast.hpp:1616:14: note: use reference type 'const std::__1::basic_string<char> &' to prevent copying
        for (const auto denominator : denominators)
             ^~~~~~~~~~~~~~~~~~~~~~~~
                        &
2 warnings generated.
  rm -f Release/sass.a && ./gyp-mac-tool filter-libtool libtool  -static -o Release/sass.a Release/obj.target/libsass/src/libsass/src/ast.o Release/obj.target/libsass/src/libsass/src/ast_fwd_decl.o Release/obj.target/libsass/src/libsass/src/backtrace.o Release/obj.target/libsass/src/libsass/src/base64vlq.o Release/obj.target/libsass/src/libsass/src/bind.o Release/obj.target/libsass/src/libsass/src/cencode.o Release/obj.target/libsass/src/libsass/src/check_nesting.o Release/obj.target/libsass/src/libsass/src/color_maps.o Release/obj.target/libsass/src/libsass/src/constants.o Release/obj.target/libsass/src/libsass/src/context.o Release/obj.target/libsass/src/libsass/src/cssize.o Release/obj.target/libsass/src/libsass/src/emitter.o Release/obj.target/libsass/src/libsass/src/environment.o Release/obj.target/libsass/src/libsass/src/error_handling.o Release/obj.target/libsass/src/libsass/src/eval.o Release/obj.target/libsass/src/libsass/src/expand.o Release/obj.target/libsass/src/libsass/src/extend.o Release/obj.target/libsass/src/libsass/src/file.o Release/obj.target/libsass/src/libsass/src/functions.o Release/obj.target/libsass/src/libsass/src/inspect.o Release/obj.target/libsass/src/libsass/src/json.o Release/obj.target/libsass/src/libsass/src/lexer.o Release/obj.target/libsass/src/libsass/src/listize.o Release/obj.target/libsass/src/libsass/src/memory/SharedPtr.o Release/obj.target/libsass/src/libsass/src/node.o Release/obj.target/libsass/src/libsass/src/operators.o Release/obj.target/libsass/src/libsass/src/output.o Release/obj.target/libsass/src/libsass/src/parser.o Release/obj.target/libsass/src/libsass/src/plugins.o Release/obj.target/libsass/src/libsass/src/position.o Release/obj.target/libsass/src/libsass/src/prelexer.o Release/obj.target/libsass/src/libsass/src/remove_placeholders.o Release/obj.target/libsass/src/libsass/src/sass.o Release/obj.target/libsass/src/libsass/src/sass2scss.o Release/obj.target/libsass/src/libsass/src/sass_context.o Release/obj.target/libsass/src/libsass/src/sass_functions.o Release/obj.target/libsass/src/libsass/src/sass_util.o Release/obj.target/libsass/src/libsass/src/sass_values.o Release/obj.target/libsass/src/libsass/src/source_map.o Release/obj.target/libsass/src/libsass/src/subset_map.o Release/obj.target/libsass/src/libsass/src/to_c.o Release/obj.target/libsass/src/libsass/src/to_value.o Release/obj.target/libsass/src/libsass/src/units.o Release/obj.target/libsass/src/libsass/src/utf8_string.o Release/obj.target/libsass/src/libsass/src/util.o Release/obj.target/libsass/src/libsass/src/values.o
  c++ '-DNODE_GYP_MODULE_NAME=binding' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/Users/st/.node-gyp/16.0.0/include/node -I/Users/st/.node-gyp/16.0.0/src -I/Users/st/.node-gyp/16.0.0/deps/openssl/config -I/Users/st/.node-gyp/16.0.0/deps/openssl/openssl/include -I/Users/st/.node-gyp/16.0.0/deps/uv/include -I/Users/st/.node-gyp/16.0.0/deps/zlib -I/Users/st/.node-gyp/16.0.0/deps/v8/include -I../../nan -I../src/libsass/include  -O3 -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=c++11 -stdlib=libc++ -fno-rtti -fno-exceptions -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/binding/src/binding.o.d.raw   -c -o Release/obj.target/binding/src/binding.o ../src/binding.cpp
In file included from ../src/binding.cpp:1:
In file included from ../../nan/nan.h:56:
In file included from /Users/st/.node-gyp/16.0.0/include/node/node.h:63:
In file included from /Users/st/.node-gyp/16.0.0/include/node/v8.h:30:
/Users/st/.node-gyp/16.0.0/include/node/v8-internal.h:452:38: error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?
            !std::is_same<Data, std::remove_cv_t<T>>::value>::Perform(data);
                                ~~~~~^~~~~~~~~~~
                                     remove_cv
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/type_traits:697:50: note: 'remove_cv' declared here
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_cv
                                                 ^
1 error generated.
make: *** [Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/st/rails/myapp/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:365:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
gyp ERR! System Darwin 20.3.0
gyp ERR! command "/usr/local/Cellar/node/16.0.0/bin/node" "/Users/st/rails/myapp/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/st/rails/myapp/node_modules/node-sass
gyp ERR! node -v v16.0.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

任何想法如何解决这个问题? (我什至不确定这是否是 xcode/node/rails/c++ 的问题)

其他说明

/usr/bin/xcodebuild -version返回
Xcode 12.4
Build version 12D4e
cpp --version返回
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

请注意:我不会在 cpp 中编码,所以我对如何解决的上下文知识知之甚少。

【问题讨论】:

【参考方案1】:

更新:从 node-sass 版本 6.0.1 开始,支持 Node 16。更新 node-sass 到高于 6.0.1 的版本可以解决这个问题。


您看到的是 node-sass 编译过程中的错误。这是一个处理您的 Sass/SCSS 样式的包,它是用 C++ 编写的,并且仅重新打包为 javascript 库。它是用 C++ 编写的,这意味着它需要在安装期间在您的设备上进行编译(这是由一个名为 node-gyp 的工具在内部完成的,您也可以在错误输出中发现它)。

问题是 node-sass 不支持 Node 16 在撰写此答案时,请参阅跟踪问题:https://github.com/sass/node-sass/issues/3077 没有估计何时会支持它(这是公平的,因为这是一个志愿者驱动的项目)。即使你设法在 Node 16 上安装了 node-sass,我也建议不要这样做,因为行为可能是未定义的。

正确的解决方案是将您的 Node 安装降级到受支持的版本(我可以看到 14 和 15 在他们的 CI 中进行了测试)。如果你 git 克隆了一个项目,但它不会安装在你的机器上,但可以为你的同事或生产服务器工作,那么很可能该项目也考虑了不同版本的 Node,并且没有在 Node 16 上进行测试,所以我建议不要在 Node 16 上开发它。如果项目在几天前为您工作,但现在不工作,很可能您最近升级了系统设置(例如 Homebrew),将您升级到 Node 16(这就是发生在我身上的事情以及我如何发现了这个问题)。

您应该与项目的作者核实它运行的 Node 的生产服务器版本是什么,并在本地安装该版本。作为最佳实践,在未来,保持生产版本和本地版本的 Node(以及 yarn 或 npm)同步。管理多个Node版本,可以使用这个工具https://github.com/nvm-sh/nvm

【讨论】:

谢谢!尝试运行 yarn upgrade node-sass 时,它仍然导致我出现此错误。我必须运行 yarn remove node-sassyarn add node-sass@6.0.1 才能让它工作。 yarn upgrade node-sass 失败,似乎是因为它想在 yarn 真正升级 node-sass 之前构建资产。 Michael Schober 的说明对我也不起作用,希望有人能发布正确的咒语以尽快升级。【参考方案2】:

node-sass is not yet compatible with node v16

明智的做法是降级节点(例如to version 14),直到 node-sass 与 v16 兼容。要使用 nvm 降级节点,只需运行:

nvm install 14

running 全局设置版本 14(因此每个新终端窗口默认为节点版本 14):

nvm alias default 14

现在您已安装节点 14 并将其设置为默认值! ..现在您只需让您的应用使用 v14。


如何让你的 Rails 应用使用节点 14

安装节点 14(见上文)。打开终端并前往应用程序的根目录,然后:

    如果 Rails 服务器正在运行,请停止它 打开一个全新的终端窗口(以便 node --version 返回 14.x(不是 16) 运行spring stop 删除yarn.lock 使用rm -rf node_modules 删除现有节点模块 检查node --version 是否返回14。如果它没有再次运行nvm install 14。 现在用yarn install重新安装模块(如果你没有节点14的纱线,用npm install --global yarn安装它) 应该会成功! 重启你的 Rails 服务器,它就可以工作了!

【讨论】:

你救了我的命。这是唯一对我有用的解决方案。非常感谢!! 感谢您的帮助!为什么要在第 6 步再次检查版本? @sekmo 这只是双重检查,因为它很容易安装多个不同的版本并迷失方向,但对于任何有 nvm 经验的人来说,步骤 6 最终只是一个检查,因此是不必要的,可以跳过跨度> 【参考方案3】:

恢复到最新的 Node v14 LTS 以使用 node-sass

brew install node@14
brew unlink node
brew link node@14
node -v
spring stop

在您的 Rails 项目中运行:

yarn install

PS:节点 16 与 node-sass https://github.com/nodejs/node/issues/38367#issuecomment-825461899 存在错误

【讨论】:

【参考方案4】:

鉴于此问题的一些答案,node-sass (v6) 的新版本已发布,该版本通过添加对节点 16 的支持来解决该问题。

就我而言,Rails 依赖于旧版本的 node-sass,因为我的 package.json (4.3.0) 中有 @rails/webpacker 的版本。将其更新到当前版本之后的版本,5.4.0,解决了这个问题。

【讨论】:

更改此版本,除了$ yarn upgrade 解决了我的问题。 yarn upgrade @rails/webpacker@5.4.0 按照建议为我工作。【参考方案5】:

同样的问题,这解决了我:

CXXFLAGS="--std=c++17" yarn install

【讨论】:

【参考方案6】:

与@murb 类似,前几天我在构建盒上运行了一次 brew update 并注意到节点 16 已安装。将它放回节点 12 为我解决了这个问题,直到我可以更新我的整个构建系统以与更新版本的节点一起正常工作。

【讨论】:

你能描述一下你降级的步骤吗?【参考方案7】:

我在构建 node-sass 时遇到此错误。

/Users/shahwarkhalid/.node-gyp/16.6.1/include/node/v8-internal.h:488:38: error: no template named 'remove_cv_t' in namespace 'std'; did you mean 'remove_cv'?

这个 hack 解决了我的问题:

cd /Users/shahwarkhalid/.node-gyp/16.6.1/include/node/

在编辑器中打开v8-internal.h 文件。

在第 488 行将 remove_cv_t 更改为 remove_cv

yarn install 再次解决问题。

【讨论】:

【参考方案8】:

我尝试使用 cpp --version 查看我当前的版本

cpp --version Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin20.3.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

编译器版本不是C++标准版。

前者是工具的版本,后者是C++标准的版本。

所有最近的主要 C++ 编译器(我知道)同时支持多种 C++ 标准。

如果要开发可移植(符合标准的)代码,C++ 标准很重要——与特定的编译器无关。这允许为多个平台开发代码,由不同的编译器编译。它还有助于以更好的质量进行开发 - 一个供应商的编译器可能会漏掉(即被容忍)的代码弱点,而另一个供应商可能会抱怨。

在编译器中明确选择 C++ 标准也很重要:

最新支持的编译器标准可能仍处于实验状态。 开发人员可能会针对某个(较旧的)标准进行开发(以保持与可用编译器尚不支持最新 C++ 标准的其他平台的兼容性),并希望确保不会出现新的东西。李>

具有特定编译器版本的编译器通常默认为特定 C++ 标准。 (可以在文档中或在线找到它。)不过,这不一定是最新支持的 C++ 标准。

C++ 标准的显式选择可以通过命令行参数来完成:

g++ 和 clang:-std=(可能还有其他供应商的编译器) MSVC:/std:

例如g++ -std=c++14 将 G++ 调用强制为 C++14 标准。

对于所有编译器/供应商来说,这个命令行参数并不完全相同,这有点令人遗憾。因此,在所使用的内置工具中定义所需的 C++ 标准更为方便。 (构建的工具会根据找到/使用的编译器选择适当的命令行参数。)

对于 CMake(我在日常工作中使用),这是

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

(对于极端情况,可能需要额外的设置,因为我曾经痛苦地发现:SO: Pointer to member variable as static member。)

OP 使用yarn,我承认以前从未听说过。

他报告说yarn install -std=c++17 解决了他的问题。 (我试图在网上找到某种文档,但我失败了。)

【讨论】:

【参考方案9】:

升级到最近发布的added support for Node 16的node-sass@6

【讨论】:

【参考方案10】:

也许不是这个问题的直接答案,但是我在 TravisCI 中调试失败的构建时遇到了这个问题,并导致我推送了很多提交来修复。对我来说,这是几天前由the fact that Node 16 was released 引起的。我注意到我在 before_script 中使用了nvm install node,它始终默认为最新版本,而不是nvm install,它实际上遵循.nvmrc 中指定的版本。虽然使用旧版本的东西不是一个长期的解决方案; yarn install -std=c++14 对我来说已经失败了。

【讨论】:

【参考方案11】:

我在使用 Node 16 时遇到了同样的问题。降级到 Node 14 对我来说效果很好。 以下是有关如何执行相同操作的简单步骤(使用 Homebrew):

检查您当前的节点版本

node -v 

检查可用的节点版本

brew search node

从当前版本取消链接

brew unlink node

使用以下命令安装您想要的版本(例如版本 14)

brew install node@14

将其链接到已安装的版本

brew link node@14

最后,只需确保使用第一步中的命令安装正确的版本即可。

【讨论】:

【参考方案12】:

对于Apple M1芯片,工作方式是:

sudo xcode-select --install
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.2/install.sh | bash
nvm install v15
nvm cache clear

【讨论】:

【参考方案13】:

我不知道const auto numerator

但是当我编辑~/Library/Caches/node-gyp/16.4.0/include/node/v8-internal.h(你的目录不同)时,如我的终端错误所示,它继续编译而没有错误。

我的解决方案:

我按照错误消息的指示将remove_cv_t 重命名为remove_cv

然后继续编译。


在这个临时修复之后我的下一步计划是更新 ng xcode。也许它具有错误消息中提示的更新模板定义

template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_cv

【讨论】:

【参考方案14】:

就我而言,我只是将节点从 12 切换到 10:

nvm use 10

【讨论】:

以上是关于错误:命名空间“std”中没有名为“remove_cv_t”的模板;你是说'remove_cv'吗?的主要内容,如果未能解决你的问题,请参考以下文章

命名空间“std”中没有名为“shared_ptr”的类型

命名空间“std”中没有名为“size”的成员

命名空间“std”中没有名为“make_unique”的成员

命名空间“std”中没有名为“hardware_constructive_interference_size”的成员

Vscode/ESP-IDF 错误命名空间“std”没有成员“array”无论如何都会编译

如何在 Xcode 中获得 std::optional 支持?