Skip to content

cpp_source fails to compile indented void-returning function #455

Open
@plietar

Description

@plietar

If a void-returning function marked with cpp11::register is indented, cpp11 fails to recognize the void return type and will try to use its result in the wrapper it generates.

# This works
cpp11::cpp_source(code = "[[cpp11::register]]\nvoid foo() {}")

# This fails to compile. Note the extra space character between the newline and void
cpp11::cpp_source(code = "[[cpp11::register]]\n void foo() {}")
using C++ compiler: ‘g++ (GCC) 14.2.1 20241116’
using C++11
/tmp/nix-shell.Cz8fPO/RtmpadKzBh/code_16bff7617b36f0.cpp:2:11: warning: ‘cpp11::register’ scoped attribute directive ignored [-Wattributes]
    2 |  void foo() {}
      |           ^
/tmp/nix-shell.Cz8fPO/RtmpadKzBh/file16bff7121f1a99/src/cpp11.cpp: In function ‘SEXPREC* _code_16bff7617b36f0_foo()’:
/tmp/nix-shell.Cz8fPO/RtmpadKzBh/file16bff7121f1a99/src/cpp11.cpp:7:30: error: invalid use of void expression
    7 |     return cpp11::as_sexp(foo());
      |                           ~~~^~
make: *** [/nix/store/bb3gfb6b740ha50bbwvbgslybnqm0vgf-R-4.4.3/lib/R/etc/Makeconf:204: /tmp/nix-shell.Cz8fPO/RtmpadKzBh/file16bff7121f1a99/src/cpp11.o] Error 1
Error: Compilation failed.

The same behaviour happens when using an external file instead of an inline code = argument.

packageVersion("cpp11")
#> [1] ‘0.5.2’

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions